Как я могу изменить массив в директиве, а затем отразить это изменение в моем контроллере?

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>

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

Теги:
arrays

1 ответ

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 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
    чувак, мне нужен этот нг-бинд вне моей директивы?
  • 0
    мой div с ng-bind не находится внутри директивы
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню