gpt4 book ai didi

angularjs - 带有所需 Controller 的 Angular $compile

转载 作者:行者123 更新时间:2023-12-03 13:26:57 25 4
gpt4 key购买 nike

我有一个复合列表指令 - 即 - 一个可以是列表本身的列表项。
父指令定义 Controller :

.directive('parent', function() {
controller: function($scope) {
},
link: function (scope, element, attrs) {
}
})

(项目)列表需要父 Controller 本身可以正常工作(为什么不应该......):
.directive('list', function() {
require: '^parent',
link: function (scope, element, attrs, parentCtrl) {
}
})

具体项目也是如此,这也很好:
.directive('item', function() {
require: '^parent',
link: function (scope, element, attrs, parentCtrl) {
}
})

一个项目可能是一个组合,在这种情况下它自己创建一个“列表”。此作品由 完成$编译 (ing) 链接函数内的列表项:
link: function (scope, element, attrs, parentCtrl) {
...
$compile("<list></list>")(scope)
...
}

这会引发异常:
找不到指令“列表”所需的 Controller “父级”!
原因很明显 - $compile 函数没有提供 Controller ,因此无法解决“父”的要求。
所以我尝试手动提供 Controller :
$compile("<list></list>")(scope, null, {'parent': parentCtrl});

它不会引发异常,但在需要时仍不提供此 Controller 。

知道如何使 $compile 函数接受也应该评估的外部 Controller 吗?

最佳答案

为了将来引用,这里是解决方案:

在 $compile 函数中,所需的 Controller 可以作为转置 Controller 传递:

$compile(template)(scope, undefined, {transcludeControllers: injectedCtrl})

其中“injectedCtrl”是列出指令期望的 Controller 的对象,例如,如果您 require: '^dad' ,然后 transcludeControllers看起来像这样:
 transcludeControllers: {
dad: { //name of controller in 'require' statement
instance: vm //instance of controller
}
}

请参阅此示例: https://jsfiddle.net/qq4gqn6t/11/

就是这样!

关于angularjs - 带有所需 Controller 的 Angular $compile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854814/

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