gpt4 book ai didi

javascript - 如何在 angularjs 指令中要求 Controller

转载 作者:IT王子 更新时间:2023-10-29 02:46:02 24 4
gpt4 key购买 nike

谁能告诉我如何将一个指令中的 Controller 包含在另一个 angularJS 指令中。例如我有以下代码

var app = angular.module('shop', []).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/', {
templateUrl: '/js/partials/home.html'
})
.when('/products', {
controller: 'ProductsController',
templateUrl: '/js/partials/products.html'
})
.when('/products/:productId', {
controller: 'ProductController',
templateUrl: '/js/partials/product.html'
});
}]);

app.directive('mainCtrl', function () {
return {
controller: function ($scope) {}
};
});

app.directive('addProduct', function () {
return {
restrict: 'C',
require: '^mainCtrl',
link: function (scope, lElement, attrs, mainCtrl) {
//console.log(cartController);
}
};
});

总的来说,我应该能够在 addProduct 指令中访问 Controller ,但我没有。有更好的方法吗?

最佳答案

我很幸运,在问题的评论中回答了这个问题,但为了完整起见,我发布了完整的答案,因此我们可以将这个问题标记为“已回答”。


这取决于你想通过共享 Controller 来完成什么;您可以共享相同的 Controller (尽管具有不同的实例),也可以共享相同的 Controller 实例。

共享 Controller

两个指令可以通过将相同的方法传递给两个指令来使用相同的 Controller ,如下所示:

app.controller( 'MyCtrl', function ( $scope ) {
// do stuff...
});

app.directive( 'directiveOne', function () {
return {
controller: 'MyCtrl'
};
});

app.directive( 'directiveTwo', function () {
return {
controller: 'MyCtrl'
};
});

每个指令都将获得其自己的 Controller 实例,但这允许您根据需要在任意多个组件之间共享逻辑。

需要 Controller

如果你想共享 Controller 的相同实例,那么你可以使用require

require 确保另一个指令的存在,然后将其 Controller 作为链接函数的参数包含在内。因此,如果您在一个元素上有两个指令,您的指令可以要求另一个指令的存在并获得对其 Controller 方法的访问权。一个常见的用例是要求 ngModel

^require,加上插入符号,除了当前元素之外,还会检查指令上方的元素,以尝试找到其他指令。这允许您创建复杂的组件,其中“子组件”可以通过其 Controller 与父组件进行通信,从而达到很好的效果。示例可能包括选项卡,其中每个 Pane 都可以与整个选项卡进行通信以处理切换; Accordion 组可以确保一次只有一个打开;等

无论哪种情况,您都必须同时使用这两个指令才能起作用。 require 是组件间通信的一种方式。

查看指令的指南页面以获取更多信息:http://docs.angularjs.org/guide/directive

关于javascript - 如何在 angularjs 指令中要求 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com