SORU
23 EKİM 2012, Salı


Sözler bağlamak için nasıl açısal JS:

Bir görünüm söz bağlamaya çalışıyorum. Eğer bunu doğrudan yapabilirsiniz bilmiyorum ama yapmaya çalıştığım bu. Yanlış ne yapıyorum herhangi bir fikir?

Not: kaynak zaman aşımı ile biraz yapmacık ve statik veri kullanır, ama bu kodu teşhis etmek için daha kolay hale getirmek için.

DÜZENLEME:JSFiddle Sayfa: http://jsfiddle.net/YQwaf/27/

EDİT: ÇÖZÜM:Dışarı çıktıolabilirdoğrudan bağlama vaat ediyor. Benim orijinal kod ile iki sorun vardı:

  1. SetTimeout() kullanarak açısal yerine $zaman aşımı bir sorun oldu. Açısal zaman aşımı tetiklendiğinde UI yenilemek gerekiyor bilmiyor ($scope bunu çözmek olabilir.$setTimeout içinde uygulamak, ya da sadece $zaman aşımı kullanın )
  2. Söz döndü bir işlev için bağlayıcı bir sorun oldu. Eğer ikinci defa çağırdı alırsa, başka bir söz ediyor. İyi söz, bir scope değişkeni ayarlamak ve sadece gerektiğinde yeni bir söz oluşturmaktır. (Benim durumumda, bu sesleniyordu $scope.$Ülke Kodu izle)

HTML:

<div ng:controller="addressValidationController">
    Region Code <select ng:model="regionCode" ng:options="r.code as r.name for r in getRegions()"/>
    Country Code<select ng:model="countryCode"><option value="US">United States</option><option value="CA">Canada</option></select>
</div>

JS:

function addressValidationController($scope, $q) {
    var regions = {
        US: [{code: 'WI',name: 'Wisconsin'}, {code: 'MN',name: 'Minnesota'}], 
        CA: [{code: 'ON',name: 'Ontario'}]
    };
    $scope.getRegions = function () {
        var deferred = $q.defer();
        setTimeout(function () {
            var countryRegions = regions[$scope.countryCode];
            console.log(countryRegions);
            if(countryRegions === undefined) {
                deferred.resolve([]);
            } else {
                deferred.resolve(countryRegions);
            }
        }, 1000);
        return deferred.promise;
    };
}

CEVAP
24 Ocak 2014, Cuma


İtibariyle 1.2, you can't use promises in templates directly anymore Açısal.
Bunun yerine, her zamanki—hayır, sihir gibi then içinde $scope sonucu koymak gerekir.

Eski davranış almak için geçici bir çözüm, diyebilirsiniz

$parseProvider.unwrapPromises(true)

ama bu özellik, daha sonra silinecektir, bu yüzden güvenmeyin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Learn word 2013 tutorials

    Learn word 2

    5 AĞUSTOS 2014
  • PUSHER

    PUSHER

    11 HAZİRAN 2014
  • TROPFEST

    TROPFEST

    27 Mart 2007