gpt4 book ai didi

angularjs - 一个元素的多个指令可以共享一个隔离的范围吗?

转载 作者:行者123 更新时间:2023-12-03 06:33:21 24 4
gpt4 key购买 nike

同一元素上的两个指令不能同时具有隔离作用域,但是它们都可以使用与其父级隔离的相同作用域吗?它们都可以使用绑定(bind)到隔离范围的属性吗?

例如,如果我在一个元素上有两个指令

<e-directive a-directive prop="parentProp"/>

一个指令定义了一个带有绑定(bind)属性的隔离范围

App.directive('eDirective', function() {
return {
restrict: 'E',
scope: {
localProp: '=prop'
},
...
};
});

其他指令是否获得该范围并且可以使用绑定(bind)属性吗?

App.directive('aDirective', function() {
return {
restrict: 'A',
link: function postLink(scope, element, attrs) {
scope.$watch('localProp', function(newProp, oldProp) {
...
}
},
...
};
});

我最初的尝试(几乎如上编码)失败了。

最佳答案

我建议您通过辅助指令的 require 属性来利用指令 Controller 之间的通信。第一个指令(e-指令)保留隔离范围,而第二个辅助指令(a-指令)具有对第一个指令的引用,并通过第一个指令上定义的函数设置属性。一个小样本是( see plunker ):

<!DOCTYPE html>
<html ng-app="plunker">

<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.2.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js" data-semver="1.2.16"></script>
<script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
<div e-directive config="parentConfig" a-directive></div>
</body>

</html>

和 JavaScript:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
$scope.parentConfig = {};
});

app.controller('ECtrl', function ( $scope ) {
this.setProp = function(newProp){$scope.config.prop = newProp;};

$scope.$watch('config', function(newProp, oldProp) {
console.log(oldProp, newProp);
});
});

app.directive('eDirective', function() {
return {
restrict: 'A',
scope: {
config: '='
},
controller: 'ECtrl',
link: function(scope, element, attrs) {
scope.config.prop ="abc";
}
};
});

app.directive('aDirective', function() {
return {
restrict: 'A',
require: 'eDirective',
link: function(scope, element, attrs,ctrl) {
ctrl.setProp("def");
}

};
});

关于angularjs - 一个元素的多个指令可以共享一个隔离的范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23221245/

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