AngularJS 限定$scope的范圍實例詳解
限定$scope的范圍
JavaScript基于原型的繼承與面向?qū)ο笾谢陬惖睦^承有著微妙的區(qū)別,這通常不是什么問題,但這個微妙之處在使用$scope時就會表現(xiàn)出來。在AngularJS中,每個$scope都會繼承父$scope,最高層稱之為$rootScope。($scope與傳統(tǒng)指令有些不同,它們有一定的作用范圍i,且只繼承顯式聲明的屬性。)
由于原型繼承的特點,在父類和子類間共享數(shù)據(jù)不太重要,不過如果不小心的話,也很容易誤用了一個父$scope的屬性。
比如說,我們需要在一個導(dǎo)航欄上顯示一個用戶名,這個用戶名是在登錄表單中輸入的,下面這種嘗試應(yīng)該是能工作的:
<div ng-controller="navCtrl"> <span>{{user}}</span> <div ng-controller="loginCtrl"> <span>{{user}}</span> <input ng-model="user"></input> </div> </div>
那么問題來了……:在text input中設(shè)置了user的ng-model,當(dāng)用戶在其中輸入內(nèi)容時,哪個模版會被更新?navCtrl還是loginCtrl,還是都會?
如果你選擇了loginCtrl,那么你可能已經(jīng)理解了原型繼承是如何工作的了。
當(dāng)你檢索字面值時,原型鏈并不起作用。如果navCtrl也同時被更新的話,檢索原型鏈?zhǔn)潜仨毜模坏绻凳且粋€對象,這就會發(fā)生。(記住,在javascript中,函數(shù)、數(shù)組和對象都是對象)
所以為了獲得預(yù)期的行為,需要在navCtrl中創(chuàng)建一個對象,它可以被loginCtrl引用。
<div ng-controller="navCtrl"> <span>{{user.name}}</span> <div ng-controller="loginCtrl"> <span>{{user.name}}</span> <input ng-model="user.name"></input> </div> </div>
現(xiàn)在,由于user是一個對象,原型鏈就會起作用,navCtrl模版和$scope和loginCtrl都會被更新。
這看上去是一個很做作的例子,但是當(dāng)你使用某些指令去創(chuàng)建子$scope,如ngRepeat時,這個問題很容易就會產(chǎn)生。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Angular使用 ng-img-max 調(diào)整瀏覽器中的圖片的示例代碼
本篇文章主要介紹了Angular使用 ng-img-max 調(diào)整瀏覽器中的圖片的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-08-08Angular2仿照微信UI實現(xiàn)9張圖片上傳和預(yù)覽的示例代碼
本篇文章主要介紹了Angular2仿照微信UI實現(xiàn)9張圖片上傳和預(yù)覽的示例代碼,非常具有實用價值,需要的朋友可以參考下2017-10-10angular inputNumber指令輸入框只能輸入數(shù)字的實現(xiàn)
這篇文章主要介紹了angular inputNumber指令輸入框只能輸入數(shù)字的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12深入解析AngularJS框架中$scope的作用與生命周期
這篇文章主要介紹了AngularJS中$scope的作用與生命周期,包括在DOM中添加controller對象的相關(guān)用法,需要的朋友可以參考下2016-03-03AngularJS實現(xiàn)圖片上傳和預(yù)覽功能的方法分析
這篇文章主要介紹了AngularJS實現(xiàn)圖片上傳和預(yù)覽功能的方法,結(jié)合HTML5實例形式對比分析了AngularJS圖片上傳的相關(guān)操作技巧與注意事項,需要的朋友可以參考下2017-11-11Angular4學(xué)習(xí)之Angular CLI的安裝與使用教程
網(wǎng)上很多教程過時,命令在angular4中不適用等等,所以下面這篇文章主要給大家介紹了關(guān)于Angular4學(xué)習(xí)之Angular CLI的安裝與使用教程的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01Angular5.0 子組件通過service傳遞值給父組件的方法
這篇文章主要介紹了Angular5.0 子組件通過service傳遞值給父組件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07