我正在使用AngularJS 1.5.3。我有一個用例,我從另一個指令中調用一個指令。換句話說,指令是鏈接的。我希望我的外部指令的範圍變量根據內部指令的結果進行更新。我在這裏創建了一個JSFiddle:http://jsfiddle.net/gstanek/6voytwuc/30/,它顯示了我所嘗試的內容。AngularJS:指令與模板引用指令和數據綁定
相同的代碼在這裏重現:
<div ng-app="myApp" ng-controller="MyCtrl">
<span first-layer-directive first-layer-info="'fist layer text'"></span>
</div>
var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', function($scope) {
});
myApp.directive('firstLayerDirective', function() {
return {
scope: {
firstLayerInfo: '='
},
template: "<div><span>1st Layer Displayed info='{{firstLayerDisplay}}'</span></div>" +
"<div>" +
"<span second-layer-directive second-layer-info=\"'second layer text'\" info=\"info\">Second layer displayed info='{{secondLayerDisplay}}'</span></div>" + "<span>Info returned from 2nd layer: {{info}}</span>",
link: function (scope, element, attrs) {
scope.firstLayerDisplay = scope.firstLayerInfo;
scope.info = '';
}
};
});
myApp.directive('secondLayerDirective', function() {
return {
scope: {
secondLayerInfo: '=',
info: '='
},
template: "<div><span>2nd Layer Displayed info='{{secondLayerDisplay}}'</span></div>",
link: function (scope, element, attrs) {
scope.secondLayerDisplay = scope.secondLayerInfo + ' plus more info';
scope.info='info generated in 2nd layer';
}
};
});
運行此的jsfiddle的輸出是:
1st Layer Displayed info='fist layer text'
2nd Layer Displayed info='second layer text plus more info'
Info returned from 2nd layer:
相反,我想最後一行顯示如下: Info returned from 2nd layer: info generated in 2nd layer
如何將數據從內部指令傳遞迴外部直接並確保使用新值更新外部指令?
這似乎解決了所描述的問題,但我仍然想知道爲什麼。如果外部指令確實看到內部指令的範圍,並且在內部指令中更新了'scope.info',爲什麼即使當'scope.info'初始設置爲a時,它也不會在外部指令中更新空白字符串?謝謝! – Gabe
在你的情況下,你已經定義了鏈接功能。你沒有提到前鏈接或後鏈接,所以它作爲後鏈接功能。因此,「secondLayerDirective」的鏈接功能將首先執行,然後執行「firstLayerDirective」的鏈接功能。所以最後scope.info將設置爲空白。還有一件事你正在使用隔離範圍,它不像一次性綁定。每當父指令更改該值時,子指令就會獲得更改。 –
謝謝!這爲我清除它 – Gabe