角度:需要从模块注入控制器
Angular: require injected controller from module
>我正在尝试在我的自定义指令中使用require函数。 但我根本无法让它工作。这就是我得到的:
.JS:
var app = angular.module('main', []);
app.controller('MyController', ['$scope', function($scope){
var random = Math.random()*10000;
console.log('init random: ' + random);
$scope.test = function(controllerName){
console.log(controllerName + " " + random);
}
}]);
app.directive('myDirective', function(){
return{
require: "^MyController",
link: function(scope, els, attrs, req){
scope.test('myDirective');
}
}
});
app.directive('mySecondDirective', function(){
return{
require: "^MyController",
link: function(scope, els, attrs, req){
scope.test('mySecondDirective');
}
}
});
.HTML:
<div ng-app="main" ng-controller="MyController">
<my-directive></my-directive>
<my-second-directive></my-second-directive>
</div>
https://jsfiddle.net/hr8thyq5/3/
我得到的只是这条错误消息:找不到指令"myDirective"所需的控制器"MyController"!
我还需要做什么才能让它工作?
需要了解原因 -
如果要共享控制器的同一实例,请使用 require
。
require
确保存在另一个指令,然后将其控制器作为链接函数的参数包含在内。因此,如果一个元素上有两个指令,则指令可能需要存在另一个指令并访问其控制器方法。一个常见的用例是需要 ngModel
.
^require
,加上插入符号,除了当前元素之外,还会检查指令上方的元素,以尝试查找其他指令。这允许您创建复杂的组件,其中"子组件"可以通过其控制器与父组件进行通信,从而产生出色的效果。示例可能包括选项卡,其中每个窗格都可以与整个选项卡通信以处理切换;手风琴组可以确保一次只能打开一个;等。
无论哪种情况,您都必须同时使用这两个指令才能正常工作。 require
是一种在组件之间进行通信的方式。
如需进一步了解,请转到此处:在此处输入链接说明
require
中指定的控制器以其指令命名,而不是控制器名称。require
的目的是与相对指令的控制器实例(this
(通信,这将等于链接函数中的req
参数。
因此,它不能仅限于 MyController
.如果需要一些抽象的ng-controller
控制器(由于这种情况的脆弱性,这没有什么意义(,那么它将是
require: "^ngController",
相关文章:
- 我可以像其他库一样将JointJS作为AngularJS模块注入吗
- 将模块注入控制器AngularJs
- AngularJS在不使用变量的情况下将服务注入模块中,这样就可以缩小它
- JavaScript模块化和依赖注入之间的区别
- JavaFX+Javascript:如何将Java对象注入AMD模块
- $injector:modulerr将自定义模块注入Angular应用程序
- angularjs自定义模块与$http注入
- 如何在angularjs中为每个控制器注入一个独特的模块
- 使用Angular JS将常量注入其他模块配置
- AngularJS 模块注入
- AngularJS选项卡导航和模块注入
- 角度 JS 模块注入错误
- 角度:需要从模块注入控制器
- 运行我的应用时,出现了Angular模块注入错误
- grunt-contrib- requires不能解析我的运行时模块注入
- 不能将一个应用模块注入另一个AngularJS
- 从外部模块注入提供程序到配置块时出现未知的提供程序错误
- 我可以动态地将一个模块注入另一个模块吗?
- 理解AngularJS模块注入逻辑
- 如何使用Typescript和NodeJS将模块注入类中