gpt4 book ai didi

javascript - 如何从另一个 Controller 访问所需的 Controller ?

转载 作者:行者123 更新时间:2023-11-29 10:11:54 24 4
gpt4 key购买 nike

我有一个 Angular 1.3 模块,看起来像这样(使用 controllerAs 的指令需要存在父指令):

angular.module('fooModule', [])

.controller('FooController', function ($scope) {
this.doSomething = function () {
// Accessing parentDirectiveCtrl via $scope
$scope.parentDirectiveCtrl();
};
})

.directive('fooDirective', function () {
return {
// Passing in parentDirectiveCtrl into $scope here
link: function link(scope, element, attrs, parentDirectiveCtrl) {
scope.parentDirectiveCtrl = parentDirectiveCtrl;
},
controller: 'FooController',
controllerAs: 'controller',
bindToController: true,
require: '^parentDirective'
};
});

这里我只是使用$scope来传递parentDirectiveCtrl,这看起来有点笨拙。

是否有另一种方法可以在没有链接功能的情况下从指令的 Controller 访问 require-ed Controller ?

最佳答案

您必须使用 link 函数来获取 require 的 Controller ,但您不需要使用范围将 Controller 的引用传递给您的自己的。相反,将其直接传递给您自己的 Controller :

.directive('fooDirective', function () {
return {

require: ["fooDirective", "^parentDirective"],

link: function link(scope, element, attrs, ctrls) {
var me = ctrls[0],
parent = ctrls[1];

me.parent = parent;
},
controller: function(){...},
};
});

但是要小心,因为 Controller 在链接之前运行,所以在 Controller 内 this.parentundefined,直到链接函数运行之后。如果您需要确切知道何时发生,您始终可以使用 Controller 函数将 parentDirective Controller 传递给:

link: function link(scope, element, attrs, ctrls) {
//...

me.registerParent(parent);
},
controller: function(){
this.registerParent = function(parent){
//...
}
}

关于javascript - 如何从另一个 Controller 访问所需的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31886256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com