2013-03-17 13 views
18

ng-view içine işlenmekte olan bir sayfa için denetleyicim olduğunu varsayalım.

Bu denetleyici, modelini güncelleştirmek için harici bir kaynağa (uygulama genelinde ileti yolu gibi) bazı olayları bağlar. Bu temelde çok kolay çalışır:

function MyController ($scope) { 
    $scope.bar = '…'; 

    externalSource.on('foo', function (data) { 
    $scope.$apply(function() { 
     $scope.bar = data.bar; 
    }); 
    }); 
} 

sorundur: Ben daha uzun gösterilmez ile ilişkili görünümde bir kez harici kaynaktan denetleyici bağlantı kesme nasıl?

dispose olay veya benzeri bir şey var mı? Ya da benim yaklaşımım tamamen yanlış ve başka bir şekilde böyle bir şeyle ilgilenmeliyim? Öyleyse nasıl?

+0

jQuerys ** on ('event', ...) ** yöntemini kullanmanız durumunda, olayı kaldırmak için sadece ** off ('event') ** yöntemini kullanabilirsiniz. Yoksa yanlış mı anladım? –

+0

Bu özellikle bir angularjs soru değil. Kullandığınız harici olay kaynağına bağlıdır. –

+3

Evet öyle. Nasıl açılacağını biliyorum ama ne zaman/nerede yapacağımı bilmiyorum. Bu, bir denetleyicinin yaşam döngüsüne bağlıdır ve bu kesinlikle AngularJS ile ilgilidir. –

cevap

35

olay kontrolörün kapsamı da yok olduğunu edilir kullanımını unbind

Bkz Scope Daha fazla bilgi için docs

+2

Sanırım, $ scope. $ ($ Destroy), function() {...}) –

+0

@Mark Rajcok Gerçekten teşekkür ederim. –

3

Kullan $ routeChangeStart veya $ routeChangeSuccess olaylar:

function MyController ($scope) { 
    $scope.bar = '…'; 

    externalSource.on('foo', function (data) { 
    $scope.$apply(function() { 
     $scope.bar = data.bar; 
    }); 
    }); 

    $scope.$on('$routeChangeStart', function(next, current){ 
    // unregister listener 
    // externalSource.off .... 
    }); 
} 

... ya $destroy olay:

$scope.$on('$destroy', function() { /* Unbind code here */ });: yürütmek için

$scope.$on('$destroy', function(){ 
    // unregister listener 
    // externalSource.off .... 
    });