您可以告诉Angular指令它需要特定的指令控制器才能使用:
function SomeDirective() {
return {
require: "someOther",
link: function (scope, elem, attrs, someOtherCtrl) {
someOtherCtrl.doSomething();
}
};
}
function SomeOtherDirective() {
return {
controller: "someOtherCtrl"
};
}
function SomeOtherCtrl() {}
SomeOtherCtrl.prototype = {
doSomething: function () {
console.log("Something");
}
}
angular.module("some", [])
.directive("some")
.directive("someOther")
.controller("someOtherCtrl");
但是,我想要一个使用 $ routeProvider 贴在路线级别的控制器:
$routeProvider.when("/some", {
templateUrl: "./some.html",
controller: "someOtherCtrl"
});
有没有办法告诉在/some
页面上实例化的指令,它应该可以使用require
属性访问 someOtherCtrl ?
我认为如果必须,我可以将 SomeOther 的功能分开,并使其更像是一个组件而不是路由控制器,这将让我实例化 SomeOther 作为路线页面上的一个组件,然后告诉一些组件, SomeOther 的嵌套元素,它需要它才能工作。
答案 0 :(得分:2)
路由控制器不是普通控制器,并且未在ngView
指令中定义,因此我s not possible to require
them, but it is possible to fetch it from directive element:
var routeController = $element.data('$ngControllerController');
它不是与路由控制器交互的普遍方法,并且有其缺点 - 指令更难测试并且在视图外变得不可用。
更常见且更可靠的替代方案是绑定和范围事件。