2015-09-04 15 views
2

在我的申請,我得到的錯誤:角度誤差:型號是類型`不number`

Angular Error: ngModel:numfmt Model is not of type number

HTML:

<input ng-model="price" type="number" name="price" placeholder="enter price" id="price" /> 

在我的控制器中我試圖把這個停止發行。但我沒有任何運氣。

$scope.$watch('price', function (val, old) { 
    $scope.value = parseInt(val); 
}); 

如何捕捉或緩解此問題?

如果您需要更多的細節不要猶豫,問

+0

它似乎爲我工作,你可以發佈完整的代碼或創建一個小提琴? – Black0ut

+0

對於任何有類似問題的人:在初始價格時不要使用引號。 ng-init =「price ='7890'」將嘗試用字符串啓動價格。 (這很明顯,但是如果你使用後端框架來生成你的頁面,很容易被忽視,你會得到ng-init =「price ='{{$ item-> price}}'」) – Cedric

回答

7

您應該使用stringToNumber指令來解決此問題。 number輸入指令<input type="number">要求該模型爲number。要將該號碼存儲爲字符串,您應該使用stringToNumber指令將其轉換爲input[number]指令所需的格式。檢查下面的代碼段。

<input ng-model="price" string-to-number type="number" name="price" placeholder="enter price" id="price" /> 

而這裏的指令(從here):

.directive('stringToNumber', function() { 
    return { 
    require: 'ngModel', 
    link: function(scope, element, attrs, ngModel) { 
     ngModel.$parsers.push(function(value) { 
     return '' + value; 
     }); 
     ngModel.$formatters.push(function(value) { 
     return parseFloat(value, 10); 
     }); 
    } 
    }; 
}); 
+0

這是內置?我需要添加文件還是更改標題功能? – BDillan

+0

@BDillan,這是內置的。你只需要在你的輸入字段中傳遞指令。 – Vineet

+1

https://docs.angularjs.org/error/ngModel/numfmt只要你是1.3+ – PSL

0
<input .... /> 

我發現角度是挑剔它接受輸入。我發現困難的方式,花了一些時間來調試我寫的東西,我通過記事本++ XML格式化程序將事情做得漂亮,以便驗證沒有不匹配的標記。

格式化取代

<script .....></script> 

有自封閉標籤

<script ...../> 

,並在我的HTML創建的格式化防止角從能夠正確地解釋我的文件的XML風格的自關閉標籤。

某些標籤,如< BR>,< meta>和(我認爲)<輸入>不需要關閉。我不知道這是否是您的問題,但我肯定會在進一步調查之前編輯該文件以刪除您的自動關閉輸入標記。

0

this.variable = isNaN(defaultValue.value)? defaultValue.value:parseInt(defaultValue.value);

相關問題