有没有办法要求路由控制器类似于您需要指令控制器的方式?

时间:2016-06-20 19:04:35

标签: angularjs

您可以告诉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 的嵌套元素,它需要它才能工作。

1 个答案:

答案 0 :(得分:2)

路由控制器不是普通控制器,并且未在ngView指令中定义,因此我s not possible to require them, but it is possible to fetch it from directive element

var routeController = $element.data('$ngControllerController');

它不是与路由控制器交互的普遍方法,并且有其缺点 - 指令更难测试并且在视图外变得不可用。

更常见且更可靠的替代方案是绑定和范围事件。