簡體   English   中英

如何從指令元素中刪除Angular Watcher?

[英]How to remove angular watcher from directive element?

我有一個看起來像這樣的指令:

app.directive('mydirective', function($compile,$document){
    var directive = {
        restrict: 'EA',
        scope:{
        },
        link: link, 
    };  
    return directive; 

    function link(scope, element, attr) {
        var template_html = "<div id=\"popup\">{{popupTitle}}</div>";
        var template = angular.element(template_html);

        element.bind('click', function(){
                if(!$("#popup").is(':visible')){
                    var $popup = $compile(template)(scope);
                    $document.find('body').append($popup);
                }else{
                    $("#popup").remove();
                }
            });

        template.remove();

    }
});

單擊mydirective時,代碼可以很好地顯示並刪除popup元素。 但是,問題是每當元素顯示和隱藏時,角度觀察器就一直在增加。 觀察者增加的數量取決於template_html中綁定的數量。

刪除彈出窗口時,如何才能刪除那些觀察者,以使觀察者不會隨着時間累積而增加。

您是否曾嘗試在刪除彈出窗口時銷毀else塊內的作用域?

    element.bind('click', function(){
        if(!$("#popup").is(':visible')){
            var $popup = $compile(template)(scope);
            $document.find('body').append($popup);
        }else{
            $("#popup").remove();
            scope.$destroy();
        }
    });

要創建新的范圍,您可以執行以下操作

var popupScope;
element.bind('click', function(){
    if(!$("#popup").is(':visible')){
        popupScope = $scope.$new();
        var $popup = $compile(template)(popupScope);
        $document.find('body').append($popup);
    }else{
        $("#popup").remove();
        popupScope.$destory();
    }
});

watcher作為變量存儲在控制器中:

var myWatcher = $scope.$watch(......

並確保可以從您的指令訪問您的控制器,然后可以調用myWatcher()來解除綁定您的觀察程序,因為調用watch將返回未綁定的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM