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

  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • pleated-jeans

    pleated-jean

    6 HAZİRAN 2013