根據https://github.com/angular/angular.js/wiki/Understanding-Scopes的說法,嘗試將數據綁定到附加到您的基本體上是一個問題$scope:范圍繼承通常是簡單明了的,并且您通常甚至不需要知道它正在發生...直到您嘗試將2路數據綁定(即表單元素,ng-model)綁定到基元(例如,數字,字符串,布爾值)從子作用域內部在父作用域上定義。它不能像大多數人期望的那樣工作。建議是通過遵循始終具有“'”的“最佳實踐”,可以很容易地避免使用基元出現此問題。在您的ng模型中現在,我有一個非常簡單的設置,它違反了以下規則:HTML:<input type="text" ng-model="theText" /><button ng-disabled="shouldDisable()">Button</button>JS:function MyController($scope) { $scope.theText = ""; $scope.shouldDisable = function () { return $scope.theText.length >= 2; };}這真的不好嗎?當我開始嘗試以某種方式使用子范圍時,這是否會以某種可怕的方式將我搞砸?我需要將其更改為類似function MyController($scope) { $scope.theText = { value: "" }; $scope.shouldDisable = function () { return $scope.theText.value.length >= 2; };}和<input type="text" ng-model="theText.value" /><button ng-disabled="shouldDisable()">Button</button>這樣我才能遵循最佳做法?您能給我一個具體的例子嗎,后者將使我免于前者帶來的可怕后果?
3 回答

浮云間
TA貢獻1829條經驗 獲得超4個贊
假設您有范圍M,A和B,其中M是A和B的父級。
如果(A,B)中的一個嘗試寫入M的范圍,則它將僅適用于非原始類型。原因是非基本類型通過引用傳遞。
另一方面,原始類型不是,因此嘗試theText
在M的作用域上進行寫操作將分別在A或B的作用域上創建同名的新屬性,而不是寫入M。如果A和B都依賴于此屬性,則會發生錯誤,因為它們中的任何一個都不知道另一人正在做什么。

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
是的,我從理論上有點理解這個問題,但是在實際中我看不出它如何影響這個簡單的例子。例如,“如果A和B都依賴于此屬性”,什么時候成立?在我的基礎上建立一個示例非常好。
- 3 回答
- 0 關注
- 711 瀏覽
添加回答
舉報
0/150
提交
取消