SORU
19 ŞUBAT 2013, Salı


AngularJS bir yönerge kullanarak otomatik doldur çözüm tarayıcı

Ne zaman gönderme formu AngularJS ve kullan tarayıcı hatırla parola işlevselliği ve bir sonraki oturum açma girişimi izin tarayıcı doldurmak oturum açma formu kullanıcı adı ve şifre, $scope model olmayacak değişmiş göre doldur.

Tek kirli hack buldum şu yönergeyi kullanmak için:

app.directive("xsInputSync", ["$timeout" , function($timeout) {
    return {
        restrict : "A",
        require: "?ngModel",
        link : function(scope, element, attrs, ngModel) {
            $timeout(function() {
                if (ngModel.$viewValue && ngModel.$viewValue !== element.val()) {
                    scope.apply(function() {
                        ngModel.$setViewValue(element.val());
                    });
                }
                console.log(scope);
                console.log(ngModel.$name);
                console.log(scope[ngModel.$name]);
            }, 3000);
        }
    };
}]);

Sorun ngModel.$setViewValue(element.val()); modeli ne görünümü element.val() döndürülen değere göre değişmez. Bunu nasıl başarabilir miyim?

CEVAP
19 ŞUBAT 2013, Salı


Apparently this is a known issue with Angular and is currently open

Çalıştığın gibi burada çalışmak bir çeşit ayrıca etrafında neler yapabileceğini emin değilim. Doğru yoldasın gibi görünüyor. Benim tarayıcı düşmek için bir şifre hatırlamak bulamadım, eğer bu işe yarayacak mı emin değilim ama bir göz atalım:

app.directive('autoFillSync', function($timeout) {
   return {
      require: 'ngModel',
      link: function(scope, elem, attrs, ngModel) {
          var origVal = elem.val();
          $timeout(function () {
              var newVal = elem.val();
              if(ngModel.$pristine && origVal !== newVal) {
                  ngModel.$setViewValue(newVal);
              }
          }, 500);
      }
   }
});
<form name="myForm" ng-submit="login()">
   <label for="username">Username</label>
   <input type="text" id="username" name="username" ng-model="username" auto-fill-sync/><br/>
   <label for="password">Password</label>
   <input type="password" id="password" name="password" ng-model="password" auto-fill-sync/><br/>
   <button type="submit">Login</button>
</form>

Sadece yaklaşımınız biraz basitleştirmek lazım. Ben kesinlikle tavsiye ederim bir şey ngModel.$pristine Kontrol ve zavallı bir kullanıcının giriş üzerine değil emin olmak için. Saniye muhtemelen çok uzun ayrıca, 3. Ara vermek zorunda kalmamalısınız $Uygula () $zaman aşımı, BTW, sizin için otomatik olarak özet bir $sıra.

Gerçek yakalamak: tarayıcınız yürütme için Açısal yenecek? Ne benim tarayıcı?

Bu muhtemelen Açısal (veya Nakavt) kolayca çözmek mümkün olmamıştır, bu yüzden bir savaş kazanılamaz. Direktif ilk çalıştırma anında giriş verileri devlet garantisi yok. Açısal başlatma zamanı...bile. Çözmek için zor bir sorun.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • george sarintzotis

    george sarin

    2 Aralık 2007
  • Mr. H

    Mr. H

    1 Temmuz 2012
  • The10HourMan

    The10HourMan

    28 EYLÜL 2012