2017-05-03 69 views
1

我有這個輸入:角NG-模型 - 空輸入返回null

<input ng-model="data.value" type="number" placeholder="0" value="0"> 

當我改變的所述輸入(例如爲1),然後將其刪除data.value 保持空。我希望當我刪除輸入data.value將保持0作爲默認值。

我看到這個解決方案: Angular ng-model: empty strings should be null

這是解決方案會爲我工作,但我想知道是否有沒有$watchng-change功能的任何其他解決方案。

在此先感謝!

+1

我認爲最乾淨的是創建一個需要ng-model的自定義屬性指令,然後應用將該值轉換爲0的自定義分析器,這在您鏈接的解決方案中提到。 – Strille

+0

但在這種情況下,它將它設置爲0.如果我將有一些其他輸入和每個輸入我想要其他默認值,我將需要有很多指令。@Strille – Sagie

+0

誰告訴你需要很多指令,只需創建一個指令並將其調用到所需的所有文本框。 –

回答

1

如果我有一些其他的輸入,每路輸入我想要其他默認值我需要有很多指令

您可能有一個defaultValue attr的指令,它將在使用HTML指令時提供。例如:

.directive('emptyToDefault', function() { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     scope: { 
      defaultValue: '=' 
     }, 
     link: function (scope, elem, attrs, ctrl) { 
      ctrl.$parsers.push(function(viewValue) { 
       if(viewValue === null) { 
        return scope.defaultValue || 0; 
       } 
       return viewValue; 
      }); 
     } 
    }; 
}); 

現在,您可以輕鬆地從外部傳遞不同的默認值,並且將在字符串被清空時設置它。

HTML會是什麼樣子,

<input ng-model="data.value" type="number" placeholder="0" value="0" 
     empty-to-default default-value="5"> 

working plunker(打開控制檯注意它是如何設置的默認值5因爲字符串被清空,並通過價值5

2

這是解決方案會爲我工作,但我想知道是否有沒有$任何其他解決方案看

link你發現,也有使用$watch


的解決方案

如果你想使用ng-change

物權法試試這個

<input ng-model="data.value" type="number" ng-change="defaultValue()" 
placeholder="0" value="0"> 

//控制器

$scope.defaultValue=function() 
{ 
    if($scope.data.value==null || $scope.data.value==='') 
    { 
    $scope.data.value=0; 
    } 
} 
  • Directive是不是最好的辦法一個其他選項
+0

謝謝,我發現該指令是一個非常好的解決方案。 – Sagie