AngularJS-将ng控制器名称转换为指令变量
如果指令模板中有一个div,其属性值为ng控制器,如何将其更改为变量:AngularJS-将ng控制器名称转换为指令变量,angularjs,Angularjs,如果指令模板中有一个div,其属性值为ng控制器,如何将其更改为变量: original html : <div ng-controller="HomeController"> ..... </div> directive: <my-directive some-var-name="HomeController"> ....</my-directive> <select-add-new select-model="$parent
original html : <div ng-controller="HomeController"> ..... </div>
directive: <my-directive some-var-name="HomeController"> ....</my-directive>
<select-add-new select-model="$parent.selectedFrontAxle" text="add new"
select-phrase="Front Axle Type" preselected-filter="Front"
label-name="Front Axle" open-dialog="Front"
select-options="axleTypes" var-ctrl="AxleTypesCtrl"></select-add-new>
.directive('selectAddNew', function () {
return {
replace: true,
restrict: "E",
scope: {
selectModel: "=",
selectOptions:"=",
labelName: "@",
preselectedFilter: "@",
selectPhrase: "@",
text: "@"
},
compile: function(tElement, attrs) {
var div = tElement.find('#ctrlId');
div.attr('ng-controller', attrs.varCtrl);
},
template: '<div>' +
'<div class="local-label">{{labelName}}: </div>' +
'<name-value-select-control select-phrase="{{selectPhrase}}" selected-item="selectModel" preselected-filter="{{preselectedFilter}}" options="selectOptions"></name-value-select-control>' +
'<div id="ctrlId">' +
'<div txt-add-new text="{{text}}" action="openDialog(\'Front\')" style="display: inline-block"></div>' +
'</div>' +
'</div>'
};
原始html:。。。。。
指令:。。。。
.directive('MyDirective',function(){
返回{
.....
范围:
{
someVarName:“??”我想您正在寻找范围:{someVarName:@},模板:'Hello{{{someVarName}
模板在编译阶段编译,此时someVarName
不可用(它是指令范围的一个属性,尚未设置)。相反,在编译函数中,我们可以将ng controller
属性添加到div
,并将其设置为some var name
属性的值:
app.directive('myDirective', function() {
return {
restrict: 'E',
template: '<div>....</div>',
compile: function(tElement, attrs) {
var div = tElement.find('div');
div.attr('ng-controller',attrs.someVarName);
}
}
});
app.directive('myDirective',function(){
返回{
限制:'E',
模板:'..',
编译:函数(远程通讯、属性){
var div=tElement.find('div');
div.attr('ng-controller',attrs.someVarName);
}
}
});
感谢您的帮助,OP,但这不会有帮助,someVarName是一个控制器,您将它放在html元素之外。这不行。如果该模板中有多个div,我如何识别应该有控制器的div?我想我找到了答案:var div=tElement.find(“#findme”)-->正确吗?您有两个选项:您可以使用children()、next()或jQuery选择器在模板中查找目标div;您可以附加()或prepend()应该具有控制器的div;您可以让compile函数创建整个模板。您是一个怪胎天才,您知道吗?我讨厌您这么聪明;)马克,你能等一下吗?我还有一个小问题,整个项目已经完成。我将在顶部发布一个附录,解释上一个问题。请将你的对话问题作为一个单独的问题发布(因为它与这个问题的标题无关)。当你创建一个新问题时,请解释你试图从哪里获得“openDialog”好的,我做到了:
app.directive('myDirective', function() {
return {
restrict: 'E',
template: '<div>....</div>',
compile: function(tElement, attrs) {
var div = tElement.find('div');
div.attr('ng-controller',attrs.someVarName);
}
}
});