您可以将控制器用作 directive/ng-transclude 的语法吗?
Can you use controller as syntax with directive/ng-transclude?
我正在使用 controller as
语法。在此范围内,我有一个指令包含访问此控制器的内容。该控制器似乎无法从 ng-transclude 中访问。
演示:http://plnkr.co/edit/ZYPCym2WQV43wh4R4nwI?p=preview
在嵌入的内容中使用控制器是否有限制?
我认为您使用 ng-controller
和指令的方式混淆了 b/c。不幸的是,我无法解释原因,但我觉得你设置控制器的方式很有趣 :)
我的想法是,如果你将 ng-controller
放在一个指令元素上,你不妨将它设为 "directive controller",如下所示:
function transcludeDirective() {
return {
restrict: 'E',
transclude:true,
scope: false,
controller: DemoCtrl,
controllerAs: 'DemoCtrlVM',
template: '<div>'+
'<p>First name: <b>{{ DemoCtrlVM.first_name }}</b></p>'+
'<ng-transclude></ng-transclude>'+
'</div>'
}
}
务必从 HTML 中删除 ng-controller="DemoCtrl as DemoCtrlVM"
。如果你这样做,它 works as expected.
这可能不是您想要的。按照你的方式,你可以使用不同的控制器和指令,并按照我的方式将控制器耦合到指令......
我正在使用 controller as
语法。在此范围内,我有一个指令包含访问此控制器的内容。该控制器似乎无法从 ng-transclude 中访问。
演示:http://plnkr.co/edit/ZYPCym2WQV43wh4R4nwI?p=preview
在嵌入的内容中使用控制器是否有限制?
我认为您使用 ng-controller
和指令的方式混淆了 b/c。不幸的是,我无法解释原因,但我觉得你设置控制器的方式很有趣 :)
我的想法是,如果你将 ng-controller
放在一个指令元素上,你不妨将它设为 "directive controller",如下所示:
function transcludeDirective() {
return {
restrict: 'E',
transclude:true,
scope: false,
controller: DemoCtrl,
controllerAs: 'DemoCtrlVM',
template: '<div>'+
'<p>First name: <b>{{ DemoCtrlVM.first_name }}</b></p>'+
'<ng-transclude></ng-transclude>'+
'</div>'
}
}
务必从 HTML 中删除 ng-controller="DemoCtrl as DemoCtrlVM"
。如果你这样做,它 works as expected.
这可能不是您想要的。按照你的方式,你可以使用不同的控制器和指令,并按照我的方式将控制器耦合到指令......