AngularJS可以做的有趣的事情之一是將過濾器應用于特定的數據綁定表達式,這是一種方便的方法,例如,應用區域性特定的貨幣或模型屬性的日期格式。在范圍上具有計算屬性也很好。問題在于這些功能都不適用于雙向數據綁定方案-從作用域到視圖僅單向數據綁定。在一個本來不錯的圖書館中,這似乎是一個明顯的遺漏-還是我錯過了什么?在KnockoutJS中,我可以創建一個讀/寫計算屬性,該屬性允許我指定一對函數,一個被調用以獲取該屬性的值,而一個被設置為屬性時被調用。例如,這使我可以實現文化意識的輸入-允許用戶鍵入“ $ 1.24”,然后將其解析為ViewModel的float,并在輸入中反映出ViewModel的更改。我可以找到與此最相似的東西是使用。$scope.$watch(propertyName, functionOrNGExpression);這允許我在$scope更改屬性時調用一個函數。但這不能解決例如文化意識的輸入問題。當我嘗試$watched在$watch方法本身中修改屬性時,請注意問題:$scope.$watch("property", function (newValue, oldValue) { $scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue; $scope.property = Globalize.parseFloat(newValue);});(http://jsfiddle.net/gyZH8/2/)用戶開始輸入時,input元素會非?;靵y。我通過將屬性拆分為兩個屬性來改進它,一個用于未解析的值,另一個用于已解析的值:$scope.visibleProperty= 0.0;$scope.hiddenProperty = 0.0;$scope.$watch("visibleProperty", function (newValue, oldValue) { $scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue; $scope.hiddenProperty = Globalize.parseFloat(newValue);});(http://jsfiddle.net/XkPNv/1/)這是對第一個版本的改進,但是更加冗長,請注意,parsedValue范圍更改的屬性仍然存在問題(在第二個輸入中鍵入內容,parsedValue直接更改。請注意,最上面的輸入沒有更新)。這可能是由于控制器操作或從數據服務加載數據而發生的。有沒有更簡單的方法可以使用AngularJS來實現此方案?我在文檔中缺少某些功能嗎?
3 回答

肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
您是否有任何理由在鏈接函數中使用“ ngModel”作為第四個參數的名稱?難道這不只是該指令的通用控制器,而該指令基本上與ngModel屬性無關?(在這里仍然學習角度,所以我可能完全錯了。)
- 3 回答
- 0 關注
- 575 瀏覽
添加回答
舉報
0/150
提交
取消