根據(jù)https://github.com/angular/angular.js/wiki/Understanding-Scopes的說(shuō)法,嘗試將數(shù)據(jù)綁定到附加到您的基本體上是一個(gè)問(wèn)題$scope:范圍繼承通常是簡(jiǎn)單明了的,并且您通常甚至不需要知道它正在發(fā)生...直到您嘗試將2路數(shù)據(jù)綁定(即表單元素,ng-model)綁定到基元(例如,數(shù)字,字符串,布爾值)從子作用域內(nèi)部在父作用域上定義。它不能像大多數(shù)人期望的那樣工作。建議是通過(guò)遵循始終具有“'”的“最佳實(shí)踐”,可以很容易地避免使用基元出現(xiàn)此問(wèn)題。在您的ng模型中現(xiàn)在,我有一個(gè)非常簡(jiǎn)單的設(shè)置,它違反了以下規(guī)則: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; };}這真的不好嗎?當(dāng)我開(kāi)始嘗試以某種方式使用子范圍時(shí),這是否會(huì)以某種可怕的方式將我搞砸?我需要將其更改為類似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>這樣我才能遵循最佳做法?您能給我一個(gè)具體的例子嗎,后者將使我免于前者帶來(lái)的可怕后果?
3 回答

浮云間
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
假設(shè)您有范圍M,A和B,其中M是A和B的父級(jí)。
如果(A,B)中的一個(gè)嘗試寫(xiě)入M的范圍,則它將僅適用于非原始類型。原因是非基本類型通過(guò)引用傳遞。
另一方面,原始類型不是,因此嘗試theText
在M的作用域上進(jìn)行寫(xiě)操作將分別在A或B的作用域上創(chuàng)建同名的新屬性,而不是寫(xiě)入M。如果A和B都依賴于此屬性,則會(huì)發(fā)生錯(cuò)誤,因?yàn)樗鼈冎械娜魏我粋€(gè)都不知道另一人正在做什么。

江戶川亂折騰
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
是的,我從理論上有點(diǎn)理解這個(gè)問(wèn)題,但是在實(shí)際中我看不出它如何影響這個(gè)簡(jiǎn)單的例子。例如,“如果A和B都依賴于此屬性”,什么時(shí)候成立?在我的基礎(chǔ)上建立一個(gè)示例非常好。
- 3 回答
- 0 關(guān)注
- 708 瀏覽
添加回答
舉報(bào)
0/150
提交
取消