gpt4 book ai didi

angularjs - Angular 中的深度指令设计

转载 作者:行者123 更新时间:2023-12-02 22:19:48 25 4
gpt4 key购买 nike

我了解隔离范围并阅读了一些有关 Angular 的资源。现在我遇到了一个问题;假设我有非常深刻的指令:

A wraps B wraps C wraps D wraps E
X wraps Y wraps D wraps E

A、B、C、D、E、X、Y 是指令。 D 和 E 需要一些传递到其隔离范围的信息,我称此信息为 info: '='。这个info属于A或X。所以如果我需要在D和E中使用info,我必须在路径中传递它:A -> B -> C -> D -> EX -> Y -> D -> E

这意味着 B、C 或 Y 必须创建其隔离范围来保存 info 值。太深!如果我将来在路径中间添加一些指令,我必须执行与上面相同的操作。我认为这不是一个好的设计。

任何人都可以给我一些建议来解决 Angular 中的这个设计问题吗?

最佳答案

好的。你可以:

1 - 将信息保存在服务中,然后将其注入(inject)到需要的地方。

2 - 允许指令通过 Controller 相互通信。例如,如果您希望指令 E 从指令 A 获取信息,A 必须有一个 Controller 和某种 getter 方法,指令 E 将需要此 Controller 并在链接函数内使用 get 方法。使用代码更容易可视化。

.directive('aDir', function () {
return {
restrict: 'E',
transclude: true,
template: '<p>aDir: {{info}}<span ng-transclude></span></p>',
scope: {
info: '='
},
controller: function ($scope) {
this.getInfo = function () {
return $scope.info;
};
},
link: function (scope, elm, attrs) {

}
};
})

.directive('eDir', function () {
return {
restrict: 'E',
template: '<p>eDir: {{info}}</p>',
require: '^aDir',
scope: { },
link: function (scope, elm, attrs, aDirController) {
scope.$watch(function () {
return aDirController.getInfo();
}, function (newVal, oldVal) {
scope.info = newVal;
});
}
};
});

Here is a JSBin .

Here you have more info about directive's require attribute.

关于angularjs - Angular 中的深度指令设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26385899/

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