2014-11-07 18 views
7

Kodum Angular 1.2'de çalıştı, ancak 1.3'te çalışmıyor ve açısal olarak neyin değiştiğini ve kodumda düzeltmek için neyi değiştirmem gerektiğini anlayamıyorum.Kodumu kırdığım açısal 1.3'te ne değişti?

Bir plunkr example kurdum.

HTML kodu

basitçe

{{ 'guy' | change }} 

javascript kodu olduğunu:

angular.module('app').service('MyService', function($timeout){ 

    var data = null; 

    $timeout(function(){ 
    data = 'this is data'; 
    },2000); 

    this.transform = function(){ 
    return data; 
    } 

}); 


angular.module('app').filter('change', function(MyService){ 
    return function(input){ 
    return MyService.transform(); 
    } 
}); 

fikri filtrenin sonuç bir zaman uyumsuz yanıtına bağlı olması.

Açısal 1.2'de, görünüm buna göre güncelleştirildi. Açısal 1.3'te değil.

Açısal 1.2 ve açısal 1,3 arasında geçiş yapmak için - yolu HTML dosyasının üst tarafındaki açısal olarak değiştirmeniz gerekir.

<script data-require="[email protected]" data-semver="1.3.0" src="//code.angularjs.org/1.3.0/angular.js"></script> 

ve bu

<script data-require="[email protected]" data-semver="1.2.0" src="//code.angularjs.org/1.2.0/angular.js"></script> 

arasında ben de 1.3.1 çalıştı - aynı sorunu.

+1

Bu bir tahmindir, ancak "$ watch" daha önce "guy" ifadesinin tamamı üzerinde olabilir. Değişim 've şimdi verimlilik nedenlerinden dolayı sadece değişmeyen' '' ''. Bunun için neden bir filtre kullanıyorsunuz? Sadece yapamaz mısın? {{AsyncData || 'guy'}} 've sonra kontrol cihazınızın' $ timeout'una (function() {$ scope.asyncData = 'newdata';}, 2000); – jdotjdot

cevap

6

Bu, 1.3.0-rc2'den beri uygulanan bir optimizasyondan kaynaklanmaktadır.

Temel olarak, $parse hizmeti, girdiler üzerinde kirli denetimi gerçekleştirir ve yalnızca girişlerden en az biri değiştirilmişse ifadeyi yeniden değerlendirir. Örneğinizde, ifadenin tek girdisi olan gerçek 'adam' hiçbir zaman değişmez, bu nedenle filtre dahil tüm ifade yeniden değerlendirilmez. Sonuç, filtrelerin vatansız olması ve aynı sonucu aynı sonucu döndürmesidir.

sen farkında varsayın ve performans cezamı kabul, böyle, süzgeç durumsal olması konum angularjs anlatarak bu optimizasyon atlayabilir:

angular.module('app').filter('change', function(MyService){ 
    var fn = function(input) { 
    return MyService.transform(); 
    } 
    fn.$stateful = true; 
    return fn 
}); 

Bu sizin gibi çalışır yeni plunkr olduğunu beklerdi.

İlgili konular