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

  • ICON

    ICON

    19 EKİM 2011
  • Attempts at least

    Attempts at

    1 Ocak 2007
  • SerienTrailerMP

    SerienTraile

    7 HAZİRAN 2012