2015-02-05 3 views
1

От контроллера мне нужно посмотреть переменную, которая привязана к области действия с двух сторон.Angularjs, наблюдая за переменной scope в директиве

Как я протестировал в JsFiddle, угловой 1,1 хорошо работает, но угловой1.2 нет.

Как это исправить?

http://jsfiddle.net/4091qg9r/3/

var simulationAppModule = angular.module('simulationApp', []) 

simulationAppModule.controller('tst', function ($scope) { 
    $scope.acts = []; 


    $scope.$watch('acts', function (neww, old) { 
     console.log('controller', neww) 
    }, true) 
}) 

simulationAppModule.directive('bn', function() { 
    return { 
     restrict: "A", 
     scope: { 
      acts: '=' 
     }, 
     link: function ($scope, iElement, iAttrs) { 
      $scope.addaction = function() { 
       $scope.acts.push('aaa') 
      } 
     } 
    } 
}) 

ответ

0

Проблема заключается в том, что вы объявляете изолированную сферу в своей директиве, так $scope.addaction никогда не достигается при использовании ng-click="addaction()" на элементе директивы. ngClick и addaction находятся в разных областях.

Одно решение не использовать изолированный объем, так что вы можете удалить

scope: { 
    acts: '=' 
}, 

Однако, если вы действительно нуждаетесь в область, чтобы быть изолированы ребенок область применения, то вы можете попробовать (не рекомендуется)

$scope.$parent.addaction = function() { 
    $scope.acts.push('aaa') 
} 

Но лучший подход - пересмотреть настройку, потому что функция addaction должна быть объявлена ​​в контроллере, а не в директиве.

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