2014-07-01 26 views
6

在此代碼:更新模型是失去了對輸入控制

<input class="form-control" ng-model="actionText" /> 

AngularJS將更新模型actionText作爲用戶類型的東西,如果該模型被用於其他地方,例如在控制器。它會在每個字符輸入時得到更新。我可以想到這種情況實際上可能是一件壞事。也許你只希望在用戶將焦點從輸入轉移到其他項目之後的模型值,例如當輸入完成時需要驗證輸入。我可以使用Javascript的模糊函數來設置處理程序,以確定焦點何時丟失,但這似乎違背了Angular的意圖。在輸入失去焦點後,是否有AngularJS方式更新模型?

回答

15

可以使用ngModelOptions指令這一點。通過ngModelOptions,您可以進一步改進ngModel指令的工作方式。爲了達到你的要求了,你可能會使用這樣的:

<input class="form-control" ng-model="actionText" 
    ng-model-options="{ updateOn: 'blur'}"/> 

你可以找到進一步的信息和角文檔中工作示例:https://docs.angularjs.org/api/ng/directive/ngModelOptions

+0

這是否在1.3分支之前工作? – lucuma

+0

這是處理驗證的推薦方式嗎?換句話說,在失去焦點之後,您需要驗證某些模式(地址,電話號碼等)的輸入。 – AndroidDev

+0

@lucuma我真的不知道它是否適用於較老的分支機構。 – Nikolas

2

我認爲最簡單的方法可能就是使用ng-blur來啓動你想要做的事情。

http://plnkr.co/edit/rhcliQRzUOBKQ3xKFrde?p=preview

app.controller('MainCtrl', function($scope) { 

    $scope.myDataBlurred = $scope.myData; 

    $scope.blurred = function() { 
    $scope.myDataBlurred = $scope.myData; 
    } 
}); 

<input ng-model='myData' ng-blur='blurred()' /> 

    <div> 
     This will update as you type: {{myData}} 
    </div> 
    <div> 
     This will update after you blur: {{myDataBlurred}} 
    </div> 
+0

我喜歡的NG-模型選項發佈由@尼古拉斯。取決於你的用例和角度版本。 – lucuma