функция в рамках директивы нежелательных уволен

0

Я передаю функцию директиве по атрибуту.

Проблема в том, что функция срабатывала, прежде чем я ее назову. Более странная проблема заключается в том, что это происходит только тогда, когда я объявляю область действия директивы.

Если это не ясно, мой код объяснит:

Без определенного объема

angular.module('app', []).
controller('ctrl', function($scope){
  $scope.testString = 'test string';
  $scope.testFunction = function(text) {
    console.log(text);
  }
}).directive('test', function() {
  return {
    link: function(scope, element) {}
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
  <span test="testFunction(testString)">Test Directive</span>
</div>

С определенной областью

angular.module('app', []).
controller('ctrl', function($scope){
  $scope.testString = 'test string';
  $scope.testFunction = function(text) {
    console.log(text);
  }
}).directive('test', function() {
  return {
    scope: {
      test: '='
    },
    link: function(scope, element) {}
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
  <span test="testFunction(testString)">Test Directive</span>
</div>

http://jsbin.com/hunewu/edit?html,js

Другой момент. В случае заданной области действия, почему функция запускается 3 раза?

Теги:
angularjs-directive

1 ответ

2
Лучший ответ

Вы не должны передавать привязку выражения (ссылку на функцию) к директиве using = (двусторонняя привязка). В идеале он должен использовать & (привязка выражения) при работе с такими случаями.

директива

.directive('test', function() {
  return {
    scope: {
      test: '&'
    },
    link: function(scope, element) {
      //then call whenever you want it
      scope.test({testString: 'myOwnString'});
    }
  };
});

CodePen

Ещё вопросы

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