[英]Compiled child directive is appended to parent but can't access parent scope?
我創建了2指令,一個顯示框( confirmedBox
為表明盒(confirmingBox)指令)和一個。 里面的鏈接功能confirmingBox
,我創建confirmedBox
通過parent范圍編制是confirmingBox
。 但是,單擊“顯示框”按鈕時,它會記錄isDisplay undefined
,這意味着我無法對從父指令到子指令的變量isDisplay進行2種方式綁定。 我不知道為什么它不起作用?
實時代碼: http : //plnkr.co/edit/SHH1JEtGJxibyem25kfd?p = preview
代碼javascript:
angular.module('AppA2_Task',[])
.directive('confirmedClick', function ($compile, $rootScope) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
scope.displayBox = true;
element.on('click', function () {
element.attr('disabled', 'disabled');
var boxScope = $rootScope.$new(true, scope);
var boxElem = $compile('<div data-confirming-box data-confirm="confirm" data-is-displayed="displayBox"></div>')(boxScope);
element.append(boxElem);
scope.$apply(function () {
scope.displayBox = true;
});
});
}
}
})
.directive('confirmingBox', function () {
return {
//require: '^confirmedClick',
restrict: 'A',
template: "<div ng-if='isDisplayed'>I am a box</div>",
scope: {
isDisplayed: '='
},
link : function(scope){
console.log('isDisplayed',scope.isDisplayed);
}
}
})
.controller('MainController', function () {
});
代碼html
<body data-ng-controller="MainController">
<button data-confirmed-click>Show box</button>
</body>
您正在將模板與boxScope
鏈接,但是在scope
上設置了displayBox = true
。
更改為:
boxScope.displayBox = true;
您還需要在編譯和鏈接之前執行此操作,否則當confirmingBox
的鏈接功能執行時,它將是undefined
的。
最后,要么在沒有參數的情況下調用scope.$apply()
,要么將所有內容包裝在click函數中。
我更喜歡第二個替代方法,因為Angular然后會將其內部包裝在try...catch
塊中,並且發生的任何異常都將傳遞給$exceptionHandler
服務。
例:
link: function(scope, element, attrs) {
element.on('click', function() {
scope.$apply(function() {
element.attr('disabled', 'disabled');
var boxScope = $rootScope.$new(true, scope);
boxScope.displayBox = true;
var boxElem = $compile('<div data-confirming-box data-confirm="confirm" data-is-displayed="displayBox"></div>')(boxScope);
element.append(boxElem);
});
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.