2017-06-03 46 views
0

問題:


我試圖用$scope.$watch方法上的號碼輸入使用嚴格的屬性一樣,maxminmaxlengthstep一個NG-模型。

當輸入中插入的值超過任何這些屬性時,ng模型將檢索undefined

因此,最終會發生什麼:$scope.$watch每當我們改變輸入值時都會觸發。一旦該值未定義,只有當插入的值再次爲有效,換句話說,遵循屬性規則(最大,最小,最大長度和步長)時纔會再次觸發。


例如,

用戶輸入: -2,4- - >$scope.$watch被觸發,並輸出,作爲newValueundefined

用戶增加了一個新的數字: -2,44 - >$scope.$watch不再被觸發,這樣一來。


main.js


$scope.$watch("user.input.base.sphere", function(newValue, oldValue) { 
console.log(newValue); 
} 

**的index.html


<input 
ng-cloak 
type="number" 
ng-class="user.settings.input.sphere.class" 
autocomplete="off" 
required  
name="sphere" 
id="in-sphere" 
title="Sphere" 
step="{{user.filter.sphere.step}}" 
min="{{user.filter.sphere.min}}" 
max="{{user.filter.sphere.max}}" 
maxlength="{{user.filter.sphere.maxlength}}" 
placeholder="{{user.filter.sphere.placeholder}}" 
ng-model="user.input.base.sphere" 
select-on-click 
sphere> 

問題:我怎麼能還讓$scope.$watch甚至在不確定ng-model

回答

1

您可以將下面的函數到ng-keyup指令被觸發。此函數將獲取對錶單控件的引用,並讀取用戶鍵入的值,即使模型中的值尚未更新。

$scope.changeHandler = function (a) { 
    var element = angular.element(document.querySelector('#in-sphere'))[0]; 
    console.log(element.value); 
} 

它連接到你的表單控件與此: ng-keyup='changeHandler()'

Here is a working plunker

+0

這將是非常有益的,謝謝你,也爲你的時間寫下一個例子,這是很親切從你 – Vladimir

+0

我必須指出,可悲的是,創建此方法後,執行時間比以前更長。但是,它在這一點上起作用 – Vladimir