是否可以在指令中创建私有函数?我需要在指令中执行一个相当复杂的过程来填充指令的模板。
像这样(HTML):
<textarea the-result="data">
</textarea>
使用Javascript:
angular
.module("MyModule")
.directive("theResult", [function () {
return {
scope: {
theResult: "="
// calculatestuff = function(d){ // ... } can't put it here (error)
},
template: ' ... '
+ '{{calculatestuff(theResult.someproperties)}}'
+ ' ... '
}
}])
我可以在哪里放calculatestuff
?
答案 0 :(得分:13)
请注意,directive(directiveName, directiveFunction)
仅使用directiveFunction
返回的内容。您可以在此函数中执行任何操作,例如,定义其他函数:
angular
.module("MyModule")
.directive("theResult", [function () {
var calculateStuff = function (d) {
// ...
};
return {
// ...
}
}]);
但当然,calculateStuff
周期内$digest
将不再存在,并且不会链接到范围,因此您无法在模板中调用它。如果这确实是您想要做的,请考虑在链接阶段将您的功能放在范围内:
angular
.module("MyModule")
.directive("theResult", [function () {
return {
scope: {
theResult: "="
},
template: ' ... '
+ '{{calculatestuff(theResult.someproperties)}}'
+ ' ... ',
link : function ($scope) {
$scope.calculateStuff = function (d) {
// ...
};
}
}
}]);
由于您使用隔离范围,因此无法从指令外部访问此函数。