簡體   English   中英

角度:使用指令中的“ require”需要父控制器並調用父函數

[英]Angular: Using “require” in Directive to require a parent Controller and call parent function

我在指令中使用require屬性在2個控制器之間創建鏈接,一切正常,但是當我想從子范圍調用父函數時,我需要使用$ parent.ParentCtl.func()和我想知道是否可以避免使用這種語法並在不顯式編寫$ parent表示法的情況下調用該函數。

孩子沒有孤立的范圍。

我環顧四周,沒有找到該問題的答案。

目前,我正在使用工廠從父級綁定該功能。

謝謝

好方法

如果您使用的是Angular> = 1.5,則可以將require語法與controllerAs語法結合使用,因此,當您顯式地使用由angular創建的父級時,可以直接使用對父級的直接引用,而不是使用范圍來訪問父級。 require另一個指令。 例如:

 angular.module("test", []) .directive("foo", function() { return { restrict: "E", scope: {}, bindToController: true, controllerAs: "fooController", controller: function() { var controller = this; controller.something = "Foo Initial Value"; controller.setSomething = function(something) { controller.something = something; console.log("Foo Changed:" + something); } } } }) .directive("bar", function() { return { scope: {}, restrict: "E", require: { "parent": "^^foo" }, controllerAs: "barController", template: "Bar <a href='' ng-click='barController.parent.setSomething(\\"from template\\")'>Change directly on parent</a>", bindToController: true, controller: function() { var controller = this; this.$onInit = function() { // We can access the parent after the $onInit. console.log(controller.parent.something); } } } }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular.js"></script> <body ng-app="test"> <foo> <bar></bar> </foo> </body> 

在此示例中, bar指令需要foo控制器,它將綁定到bar控制器的parent屬性。

不太好

我不喜歡這種方式,因為偽指令是通過按正確順序使用它們的巧合而綁在一起的。

 angular.module("test", []) .directive("foo", function() { return { restrict: "E", scope: true, controller: ["$scope", function($scope) { $scope.something = "Foo Initial Value"; $scope.setSomething = function(something) { $scope.something = something; console.log("Foo Changed:" + something); } }] } }) .directive("bar", function() { return { scope: true, restrict: "E", template: "Bar <a href='' ng-click='setSomething(\\"from template\\")'>Change directly on parent</a> Something: {{something}}" } }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular.js"></script> <body ng-app="test"> <foo> <bar></bar> </foo> </body> 

根據我的經驗,我建議使用ControllerAs語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM