Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS-将ng控制器名称转换为指令变量_Angularjs - Fatal编程技术网

AngularJS-将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

如果指令模板中有一个div,其属性值为ng控制器,如何将其更改为变量:

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);
        }
    }
});