2015-06-25 1 views
0

Я сделал директиву с изолированной областью с помощью метода «=», в этой директиве я передаю пустой массив, затем я нажимаю данные на этом массиве .... Как это изменение может быть отражено на исходном массиве в моем контроллере?Как я могу изменить массив в директиве, а затем отразить это изменение в моем контроллере?

Вот пример:

angular.module('myModule').controller('MyController', ['$scope', function($scope) { 

     $scope.test = []; 

    }]); 

angular.module('myModule').directive('mydirective', function() { 

    return { 
     scope: { 
      test: "=", 
      bread: "=" 
     }, 
     restrict: 'E', 
     link: function(scope, element, attribute) { 

      scope.test.push('one more') 

     }, 
     replace: true, 
     templateUrl: 'some template' 
    }; 
}); 

HTML

<div ng-controller='MyController'> 
    <mydirective test='test'></mydirective> 

    <div ng-bind='test'> </div> 

    </div> 

Когда я нажать что-то на массив я не имею отражение того, что в моем контроллере. Как я могу это исправить?

+0

Является ли ваш код полным? Кажется, вы не передаете переменную области видимости с вашего контроллера на директиву. – Starscream1984

+0

@ Starscream1984 ну, вы должны передать '$ scope' контроллеру из директивы, а не наоборот - в любом случае OP имеет это неправильное –

+0

да, я прошел, это просто упрощенный пример моей реальной проблемы. Я передаю массив test для директивы, затем я помещаю что-то в этот массив внутри директивы, а изменение не отражается в моем контроллере. –

ответ

0

Вот как это сделать, чего вы пытаетесь достичь.

HTML

<!-- myCtrl contains the original array, which we push here to the scope as 'ctrl' --> 
<div ng-controller='myCtrl as ctrl'> 
    <!-- we pass your directive 'ctrl.test', which tells angular to two-way bind to the 
     test property on the 'ctrl' object on the current scope --> 
    <mydirective test='ctrl.test'> 
    <!-- we're inside the isolate scope: test here refers to mydirective's idea of test, 
     which is the two-way bound array --> 
    <div ng-bind='test'></div> 
    </mydirective> 
</div> 

JS

angular.module('app', []) 
    .directive('mydirective', function() { 
    scope: { 
     test: '=' 
    }, 
    link: function($scope) { 
     $scope.test.push('one more'); 
    } 
    }) 
    .controller('myCtrl', function() { 
    this.test = []; 
    }); 

Любые изменения в массив теперь будут отражены в ng-bind. Обратите внимание, что неправильная практика размещения примитивов на $scope без участия в объекте (из-за механики прототипического наследования), поэтому вы хотите изменить $scope.test на что-то другое.

+0

человеку мне нужно это ng-bind за пределами моей директивы? –

+0

мой div с ng-bind не входит в директиву –

+0

, вы можете перемещать 'ng-bind' вне до тех пор, пока он находится внутри того же div, что и' myCtrl' –

Смежные вопросы