![](/img/trans.png)
[英]Dynamically adding an attribute Directive to a transclude Directive in AngularJS
[英]AngularJS adding Directive dynamically to DOM with JavaScript
我正在使用Angular 1.x和Socket.io開發一個小型聊天應用程序。 屏幕上會顯示一個列表,其中列出了可以聊天的人。 當單擊某個人時,在控制器中稱為聊天功能。 我傳遞了所需的人員信息(id,socket_id等)。 然后,我使用指令動態創建一個聊天框(如facebook聊天框)並添加到dom。 指令具有孤立的范圍。 這是在單擊人員時向DOM添加指令的代碼:
temp = {
'name' : driver.name,
'surname' : driver.surname,
'image' : driver.image
};
var divElement = angular.element(document.querySelector('.chat-container'));
var appendHtml = $compile('<chat-box receiver="' + temp +
'" id="' + driver.id + '" visible="true"></chat-box>')($scope);
divElement.append(appendHtml);
和指令代碼:
.directive('chatBox', function($timeout) {
chatboxes = [];
return {
restrict : 'EA',
templateUrl : 'templates/chat.box.tpl.html',
replace : true,
scope : {
receiver : '@',
visible : '@',
id : '@'
},
link: function(scope, element, attrs) {
},
controller : function($scope) {
$scope.close = function() {
$scope.visible = false;
}
}
}
})
在AngularJS中,避免原始DOM操作。 DOM操作只能通過指令來完成:
<div class="chat-container">
<chat-box ng-show="$ctrl.visible"
receiver="$ctrl.temp"
id="{{$ctrl.driver.id}}"
on-close="$ctrl.visible = false">
</chat-box>'
</div>
在指令中,使用一次性<
綁定將對象置於隔離范圍內,並使用表達式&
綁定來傳遞指令中的close事件:
app.directive('chatBox', function() {
return {
restrict : 'EA',
templateUrl : 'templates/chat.box.tpl.html',
scope : {
receiver : '<',
onClose : '&',
id : '@'
},
link: function(scope, element, attrs) {
},
controller : function($scope) {
$scope.close = function() {
$scope.onClose();
}
}
}
})
在這種情況下,元素的可見性由ng-show指令控制 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.