从指令视图 AngularJS 调用控制器中的函数
calling function in a controller from a directive view, angularJS
我正在尝试使用 ng-click 在 html 中调用两个函数作为指令。 第一个函数"checkUrl"位于指令控制器中,并且工作正常。
第二个函数"findUrl"位于主应用程序控制器中,并且未被触发。
.HTML:
<div class="status" ng-click="checkUrl()">
<b ng-click="checkUrl()">{{card.status}}</b>
</div>
<div ng-click="findUrl()" class="image">
<img ng-src={{card.image}} alt="">
</div>
我有几个问题:
1) 这是因为两个控制器的作用域不同,其中一个无法访问另一个控制器吗?
2) 如何让指令 view/html 调用主控制器函数?
指令的控制器:
$scope.checkUrl = function() {
console.log("invoking checkUrl from the directive's controller.")
asnService.showUrl();
};
应用控制器:
$scope.findUrl = function() {
console.log("invoking findUrl from the app controller");
asnService.showUrl();
};
要回答您的问题,您可以使用 $scope.$parent.findUrl() 访问指令父作用域上的范围变量。不一定推荐,但它有效。
这里有
3种方法:
第一
如果在指令中没有隔离范围,您的示例工作正常https://jsfiddle.net/vorant/waf8rta2/1/
第二
如果指令中的范围是隔离的,请将此代码添加到指令的控制器中
$scope.findUrl = function() {
$scope.$parent.findUrl();
};
https://jsfiddle.net/vorant/waf8rta2/2/
最佳使用方式$emit
(指令必须具有隔离范围)
指令的控制器:
$scope.findUrl = function() {
$scope.$emit('status:findUrl');
};
应用控制器:
$scope.$on('status:findUrl',function(){
$scope.findUrl();
});
https://jsfiddle.net/vorant/waf8rta2/4/
相关文章:
- AngularJS,angular.element($0).scope()揭示了每个控制器的函数
- 为什么我的控制器没有启动函数.js脚本
- 从全局函数调用Ember控制器上的方法
- AngularJS:控制器中的函数被模板多次调用
- 在Angular中呈现DOM对象时,如何调用控制器中指定的函数
- Angular,从指令控制器中的控制器触发函数
- 如何在指令链接函数中使用从控制器传递的筛选器
- 从控制器Angularjs调用链接函数
- 角度指令控制器:参数不是函数,未定义
- 如何从页面中的jquery调用angular js函数控制器
- angularjs调用事件中控制器的一个函数
- 通过指令在控制器中执行javascript函数
- AngularJS执行指令模板中的控制器函数
- 从指令链接函数监视控制器作用域
- AngularJS:如何与其他控制器共享作用域函数和变量
- 如何在angular ui模态控制器中定义函数
- 当指令中已经给定作用域时,如何访问控制器中声明的函数
- AngularJS:如何调用指令中定义的函数'控制器的作用域
- 我是否需要将工厂调用放在控制器的函数中
- 如何在角函数控制器中传递绑定值