0

У меня есть директива с переменным единственного и одностороннего связывания. , но когда я изменяю эту переменную в контроллере директивы, он также обновляет родительскую область.Угловая директива 1.5 с односторонней привязкой обновляет родительскую область

Пример кода:

function someDirective() { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: {}, 
     bindToController: { 
      parentVar: '<' 
     }, 
     templateUrl: templateUrl, 
     controller: directiveController, 
     controllerAs: 'vm' 
    } 
} 

function directiveController($scope) { 
    var vm = this; 

    $scope.$watchCollection('vm.parentVar', doSomething); 

    function doSomething(newCollection) { 
     var some_object = { 
      property1: 1, 
      property2: 2 
     }; 

     newCollection.unshift(some_object); 
    } 
} 

После того как я обновить переданную переменную в директиве, я вижу some_object в других частях моего приложения.

спасибо.

ответ

0

parentVar - ссылка на массив, поэтому к элементам, которые можно добавить к ним, можно получить доступ с обоих родительских контроллеров.

Если вы не хотите, чтобы изменения от директивного контроллера отражались, вам придется клонировать массив, прежде чем работать с ним.

function directiveController($scope) { 
    var vm = this; 

    $scope.$watchCollection('vm.parentVar', doSomething); 

    function doSomething(newCollection) { 
     var clonedCollection = newCollection.slice(); 
     var some_object = { 
      property1: 1, 
      property2: 2 
     }; 

     clonedCollection.unshift(some_object); 
    } 
} 
+0

Спасибо, это именно то, что я сделал. Является ли это предполагаемым поведением? – ND88

+0

Да. '<' - односторонняя привязка гарантирует, что наблюдатель не будет установлен для этой переменной в родительской области. –