如何从控制器调用指令作用域上的函数
How to call a function on a directive scope from the controller
我在互联网上搜索了很多,但找不到解决方案,请帮忙!
directive('menu',function(){
return{
link : function(scope,element,attrs){
scope.foo = function(){
alert('test!');
}
},
controller : function($scope){
$scope.foo();
}
}
});
使用$evalAsync()
:延迟对foo()
的调用
controller : function($scope){
$scope.$evalAsync(function() {
$scope.foo();
console.log($scope);
});
}
小提琴
您也可以使用$timeout()
而不是$evalAsync()
。两者都允许首先执行链接函数。
正如Ye Liu所说,您的控制器调用指令的编译然后链接函数。从角度指令文档(http://docs.angularjs.org/guide/directive):
控制器在预链接阶段之前实例化
控制器将在您的应用程序范围内,一旦后链接功能完成,您的指令将成为此范围的子指令。请考虑链接函数的目的是将模型数据绑定到模板,并为绑定的变量设置监视,而不是创建一个谨慎的"指令对象"。
如果您试图在链接函数内部设置foo函数以访问指令范围变量,请查看"scope:"指令属性中的指令委托函数和绑定变量。angular指令教程给出了一个有点迟钝的版本作为它的最后一个例子("zippy"),Angularjs指令委托没有通过中介处理程序激发,给出了可以从模板本身调用的委托函数的例子。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- AngularJS:如何与其他控制器共享作用域函数和变量
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 嵌套的Angular指令触发父对象上的作用域函数
- $uibModal从windowTemplate调用作用域函数
- 角度:创建可以调用作用域函数的自定义指令
- 在DOM(html)上下文中使用角度作用域函数时出现的问题
- 为什么我的作用域函数没有获取从模型传递的数据
- AngularJS在ngClass更改后执行作用域函数
- 控制台.log在 AngularJS 中执行作用域函数
- JavaScript 不作用域函数参数
- 本地作用域函数原型覆盖
- 在 AngularJS 中执行作用域函数内的服务后,范围变量不会更新
- 达到 10 次摘要迭代,中止(作用域函数问题)
- AngularJS在指令中附加作用域函数
- Javascript eval() for Json 字符串注入了全局作用域函数
- JavaScript本地作用域函数
- 从指令调用父作用域函数
- AngularJS ng控制器指令不接受javascript中的变量(作用域函数),也不给出任何错误
- Javascript:从类内部创建全局作用域函数