Я передаю функцию директиве по атрибуту.
Проблема в том, что функция срабатывала, прежде чем я ее назову. Более странная проблема заключается в том, что это происходит только тогда, когда я объявляю область действия директивы.
Если это не ясно, мой код объяснит:
Без определенного объема
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 раза?
Вы не должны передавать привязку выражения (ссылку на функцию) к директиве using =
(двусторонняя привязка). В идеале он должен использовать &
(привязка выражения) при работе с такими случаями.
директива
.directive('test', function() {
return {
scope: {
test: '&'
},
link: function(scope, element) {
//then call whenever you want it
scope.test({testString: 'myOwnString'});
}
};
});