gpt4 book ai didi

angularjs - 指令 Controller 中的访问需要 Controller

转载 作者:行者123 更新时间:2023-12-05 01:00:47 26 4
gpt4 key购买 nike

app.directive('mainCtrl', function () {
return {
controller: function () {
this.funcA = function(){}
}
};
});

app.directive('addProduct', function () {
return {
restrict: 'E',
require: '^mainCtrl',
link: function (scope, lElement, attrs, mainCtrl) {
mainCtrl.funcA()
}
};
});

我不想使用链接方法,而是使用 Controller 方法。
有没有办法在指令 addProduct 的 Controller 方法中获取 mainCtrl。

就像是:
app.directive('addProduct', function () {
return {
restrict: 'E',
require: '^mainCtrl',
controller: function (scope, mainCtrl) {
mainCtrl.funcA()
}
};
});

最佳答案

您仍然需要使用 link功能,因为 Controller 被注入(inject)那里。但是,您可以请求指令自己的 Controller ,然后将另一个所需的 Controller 设置为其属性:

app.directive('addProduct', function () {
return {
restrict: 'E',
require: ['addProduct','^mainCtrl'],
controller: function ($scope) {
// this.mainCtrl is still not set here
// this.mainCtrl.funcA(); // this will cause an error

// but typically it is invoked in response to some event or function call
$scope.doFuncA = function(){
this.mainCtrl.funcA();
}
},
link: function(scope, element, attrs, ctrls){
var me = ctrls[0], mainCtrl = ctrls[1];
me.mainCtrl = mainCtrl;
}
};
});

关于angularjs - 指令 Controller 中的访问需要 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28997377/

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