Angular 复合(超级)指令不允许在组件(子)指令上进行 2 种方式绑定
Angular composite (super) directive not allowing 2 way binding on component (child) directives
我需要创建一个复合指令,其中包含单独的全功能指令。我的一个组件指令向 dom 添加了一个元素,该元素绑定到组件指令控制器中的一个值。当复合指令在编译函数中添加组件指令时,它似乎可以工作,但是组件指令中具有 2 种方式绑定的部分似乎没有被编译,只是呈现 {{ctrl.value}} 字符串屏幕上。我意识到这有点令人费解,所以我提供了一个 plunk 来帮助澄清这个问题。
app.directive('compositeDirective', function($compile){
return {
compile: compileFunction
}
function compileFunction(element, attrs){
attrs.$set("component-directive", "");
element.removeAttr("composite-directive");
element.after("<div>Component value when added in composite directive: {{compCtrl.myValue}}</div>");
return { post: function(scope, element){
$compile(element)(scope);
}};
}
});
app.directive('componentDirective', function(){
return {
controller: "componentController as compCtrl",
link: link
};
function link(scope, element){
element.after("<div>Component value: {{compCtrl.myValue}}</div>");
}
});
app.controller('componentController', function(){
var vm = this;
vm.myValue = "Hello";
});
我认为 link 函数的更改不会导致任何编译发生,除非您手动调用 $compile,即
app.directive('componentDirective', function($compile){
return {
controller: "componentController as compCtrl",
link: link
};
function link(scope, element){
var elm = $compile("<div>Component value: {{compCtrl.myValue}}</div>")(scope);
element.append(elm);
}
});
更新的插件:http://plnkr.co/edit/pIixQujs1y6mPMKT4zxK
您也可以使用编译函数代替link:http://plnkr.co/edit/fjZMd4FIQ97oHSvetOgU
此外,请确保使用 .append() 而不是 .after()。
我需要创建一个复合指令,其中包含单独的全功能指令。我的一个组件指令向 dom 添加了一个元素,该元素绑定到组件指令控制器中的一个值。当复合指令在编译函数中添加组件指令时,它似乎可以工作,但是组件指令中具有 2 种方式绑定的部分似乎没有被编译,只是呈现 {{ctrl.value}} 字符串屏幕上。我意识到这有点令人费解,所以我提供了一个 plunk 来帮助澄清这个问题。
app.directive('compositeDirective', function($compile){
return {
compile: compileFunction
}
function compileFunction(element, attrs){
attrs.$set("component-directive", "");
element.removeAttr("composite-directive");
element.after("<div>Component value when added in composite directive: {{compCtrl.myValue}}</div>");
return { post: function(scope, element){
$compile(element)(scope);
}};
}
});
app.directive('componentDirective', function(){
return {
controller: "componentController as compCtrl",
link: link
};
function link(scope, element){
element.after("<div>Component value: {{compCtrl.myValue}}</div>");
}
});
app.controller('componentController', function(){
var vm = this;
vm.myValue = "Hello";
});
我认为 link 函数的更改不会导致任何编译发生,除非您手动调用 $compile,即
app.directive('componentDirective', function($compile){
return {
controller: "componentController as compCtrl",
link: link
};
function link(scope, element){
var elm = $compile("<div>Component value: {{compCtrl.myValue}}</div>")(scope);
element.append(elm);
}
});
更新的插件:http://plnkr.co/edit/pIixQujs1y6mPMKT4zxK
您也可以使用编译函数代替link:http://plnkr.co/edit/fjZMd4FIQ97oHSvetOgU
此外,请确保使用 .append() 而不是 .after()。