2013-11-09 15 views
8

task.minlength = 3 özniteliği içeren Config adında bir sabitim var.ng-minlength içinde dinamik değer

ben $rootScope sabit ekleme ediyorum:

<input type="text" ng-model="newTask" placeholder="Write a new task..." required ng-minlength="{{ Config.task.minlength }}"> 

doğru göre ayrıştırılır alır: bir şablon içinden

.run(function($rootScope, Config) { 
    $rootScope.Config = Config; 
}) 

, bir girişin ng-minlength yönergesi içine Config.task.minlength değerini ayarlamak istediğiniz DevTools için:

enter image description here

Ancak doğrulama tetiklendiğinde değildir: Ben sadece yerine Config.task.minlength interpolasyon 3 yazarken

$scope.form.$error['minlength'] // undefined 

iyi çalışır.

ng-minlength değeri kodlanmış mı? Herhangi bir geçici çözüm var mı?

+0

İfade parantezlerini kaldırın ve sadece – charlietfl

+0

değişkenini kullanın. Şanssızlık, '$ scope.form. $ Hata ['minlength']' – jviotti

+0

'da hangi hata gösteriliyor? sorunum yok ...ve neden $ scope.form. $ error.minlength' kullanmıyorsunuz? –

cevap

8

ngModelController yok $observe veya $eval hiçbir şekilde ngMinlength değeri, bu nedenle sadece statik tamsayı değerleri alır.

app.directive('myMinlength',function(){ 
    return { 
    require: 'ngModel', 
    link: function(scope,elm,attr,ngModel){ 

     var minlength = 0; 

     var minLengthValidator = function(value){  
     var validity = ngModel.$isEmpty(value) || value.length >= minlength; 
     ngModel.$setValidity('minlength', validity); 
     return validity ? value : undefined; 
     }; 

     attr.$observe('myMinlength', function(val){ 
     minlength = parseInt(val,10); 
     minLengthValidator(ngModel.$viewValue); 
     }); 


     ngModel.$parsers.push(minLengthValidator); 
     ngModel.$formatters.push(minLengthValidator); 
    } 
    }; 
}); 

şöyle kullanın: ng-minlength bir dinamik değeri elde etmek zor değildir

<input type="text" name="something" my-minlength="{{config.min}}" ng-model="something"> 
1

Bazı sözdizimi hataları var.

Sen girişi için bir isim koymalıdır: Sonra

<input name="newtask" type="text" ng-model="newTask" placeholder="Write a new task..." required ng-minlength="{{ Config.task.minlength }}"> 

, böyle hatayı yakalar:

$scope.form.newtask.$error['minlength'] 
0

Ben $observe, İşte bir example olduğunu kullanmak kendi yönergesini oluşturdu. Açısal, kapsam değerlerini izleyecek ve buna göre güncellenecektir.

bir Plunker bakınız: http://plnkr.co/edit/tMHQq7YIBlvMw7A60H2e?p=preview

Kontrolör

function myCtrl(){ 
    $scope.myMinLength = 5; // could also come from config 
} 

Görünüm:

<input type="text" ng-model="myString" ng-minlength="myMinLength"> 

nota önemli şey, ng-minlength değeri zorunda olmamasıdır parantez içinde olmak.

İlgili konular