当前位置: 首页 > 面试题库 >

如何为指令设置动态控制器?

万俟飞语
2023-03-14
问题内容

谈话很便宜,请先显示我的代码:

HTML:

<div add-icons="IconsCtrl">
</div>

指示:

angular.module('attrDirective',[]).directive('addIcons', function($compile){
return {
    restrict : 'A',
    controller : "IconsCtrl"
    },
    link : function (scope, elem , attrs, ctrl) {
        var parentElem = $(elem);
        var icons = $compile("<i class='icon-plus' ng-click='add()'></i>)(scope);
        parentElem.find(".accordion-heading").append(icons);
    },
}

});

控制器:

function IconsCtrl($scope){
  $scope.add = function(){
    console.log("add");
  };
}

现在工作了,当我单击加号图标时,浏览器控制台输出“添加”。

但我想将控制器动态设置为指令,如下所示:

HTML:

<div add-icons="IconsOneCtrl">
</div>
<div add-icons="IconsTwoCtrl">
</div>

控制器:

function IconsOneCtrl($scope){
       $scope.add = function(){
        console.log("IconsOne add");
       };
    }

function IconsTwoCtrl($scope){
    $scope.add = function(){
        console.log("IconsTwo add");
    }
}

指令喜欢:

angular.module('attrDirective',[]).directive('addIcons', function($compile){
return {
    restrict : 'A',
    controller : dynamic set,depends on attrs.addIcons
    },
    link : function (scope, elem , attrs, ctrl) {
        var parentElem = $(elem);
        var icons = $compile("<i class='icon-plus' ng-click='add()'></i>)(scope);
        parentElem.find(".accordion-heading").append(icons);
    },
}
});

如何实现我的目标?感谢您的回答!


问题答案:

现在可以使用AngularJS。在指令中你只需要添加两个新的属性叫 controllername财产,也isolate scope正好在这里需要。

指令中要注意的重要事项

scope:{}, //isolate scope
controller : "@", // @ symbol
name:"controllerName", // controller names property points to controller.

设置指令动态控制器的工作演示

HTML标记:

<communicator controller-name="PhoneCtrl" ></communicator>
<communicator controller-name="LandlineCtrl" ></communicator>

角度控制器和指令:

var app = angular.module('myApp',[]).
directive('communicator', function(){
return {
    restrict : 'E',
    scope:{},
    controller : "@",
    name:"controllerName", 
    template:"<input type='text' ng-model='message'/><input type='button' value='Send Message' ng-click='sendMsg()'><br/>"          
  }   
}).
controller("PhoneCtrl",function($scope){
 $scope.sendMsg = function(){
     alert( $scope.message + " : sending message via Phone Ctrl");
    }
}).
controller("LandlineCtrl",function($scope){
    $scope.sendMsg = function(){
        alert( $scope.message + " : sending message via Land Line Ctrl ");
    }
})

您的情况下,您可以在下面的代码段中尝试一下。

工作演示

HTML标记:

<div add-icons controller-name="IconsOneCtrl">
</div>
<div add-icons controller-name="IconsTwoCtrl">
</div>

角度代码:

angular.module('myApp',[]).

directive('addIcons', function(){
return {
    restrict : 'A',
    scope:{},
    controller : "@",
    name:"controllerName",    
    template:'<input type="button" value="(+) plus" ng-click="add()">'
  }
}).
controller("IconsOneCtrl",function($scope){
     $scope.add = function(){
        alert("IconsOne add ");
      }
}).
controller("IconsTwoCtrl",function($scope){
     $scope.add = function(){
        alert("IconsTwo add ");
      }
});


 类似资料:
  • 问题内容: 我可能会考虑将其完全倒退,但是我正在尝试制作三个嵌套指令,让它们称为:屏幕,组件和小部件。我希望窗口小部件能够触发组件中的某些行为,从而触发屏幕中的某些行为。所以: 我可以使用来在小部件的链接fn中要求父组件,但是如何进一步使组件控制器访问其包含的屏幕呢? 我需要的是WHAT in组件,因此,当您单击小部件的按钮时,它会发出“ screeny!”警报。 谢谢。 问题答案: 您可以通过以

  • 问题内容: 使用TokenInput插件并使用AngularJS内置的formController验证。 现在,我正在尝试检查该字段是否包含文本,然后将其设置为有效(如果包含)。使用该插件的问题是它创建了自己的输入,然后创建了ul + li进行存储。 我可以访问addItem(formname)和控制器的功能,只需将其设置为$ valid即可。 标记。 JS。 当TokenInput输入并传入对象

  • 我想做的是根据滚动的数字将Imageview设置为不同的骰子侧。

  • 问题内容: 我知道a中的a 可以共享到中的链接函数。 例如,在这段代码中,我可以从已声明的控制器调用一个函数,以在浏览器控制台上打印“ Hello World”: 好的,这很好。 我的问题是 : 在这种方法中,控制器和指令之间共享的是 SAME 范围吗? 使用这种方法会有什么后果?让我们假设我 不会 仅在中操纵元素。 我真的需要避免在此操作DOM元素吗?即使,等都是一样的吗? 这些是我在Angul

  • 比如我创建了几个指令 v-number,v-text 来限制输入不同的文本 此时我遍历生成子组件的时候,要根据不同的type来配置不一样的指令,这个需求要如何实现? 如果我的指令还包含参数,比如可以通过下面不同的字段 v-input:number、v-input:text 在指令内部进行处理 但是主要问题还是在于动态渲染组件的时候如何动态配置不同的指令,以及指令不同的传参?

  • 问题内容: 谁能告诉我如何在另一个angularJS指令中包含一个指令中的控制器。例如我有以下代码 通过所有帐户,我应该能够使用addProduct指令访问控制器,但是我不能。有更好的方法吗? 问题答案: 我很幸运,并在对问题的评论中回答了这个问题,但是为了完整起见,我发布了完整的答案,因此我们可以将此问题标记为“已回答”。 这取决于您要通过共享控制器来完成的工作。您可以共享同一控制器(尽管实例不