location是什么告喊?
location是一個關于當前網(wǎng)頁地址的對象,從屬于window之下,當然狗准,window之下的對象在不引起歧義或者混淆的情況下,一般是可以省去window的茵肃。location本身是一個js對象腔长,包含一些屬性和方法。具體可以參考w3school 验残。
angular location
angular中的location是一個service捞附,寫作$location。
getter和setter方法
getter方法用于獲取對象的私有屬性,setter用于設置對象的私有屬性您没。 js中是不存在私有變量的鸟召,但是通過一些命名方式(如私有變量名以雙下劃線開始)約定,可以人為的規(guī)定某些變量為私有變量氨鹏。 正因為js本身不支持私有變量欧募,所以對象的屬性我們都可以通過object.variable的方式讀取。getter和setter方法只是我們?yōu)榱俗宩s對象的操作更加規(guī)范仆抵。例如跟继,可以在setter方法中做一些規(guī)則校驗,在getter方法中做一些初始化肢础,等等还栓。
Methods
注:如果方法沒有參數(shù)說明或者示例,表示不需要參數(shù)传轰。
absUrl()
getter:返回完整url剩盒。
hash()
getter:返回hash段。
setter:設置hash段并返回location慨蛙。如location.hash(‘xxx’)辽聊。
host()
getter:返回host。
path()getter:返回路徑期贫。http://a.com/123, path就是123跟匆。 setter:設置路徑。$location.path(‘/124’)通砍。
port()
getter:返回端口號玛臂。
protocol()
getter:返回協(xié)議名烤蜕,如https。search()
search指的是url的query部分迹冤。 window.location.search會返回包括讽营?的部分,個人認為十分不方便解析泡徙。 假設url為:http://a.com?name=remind&gender=male橱鹏, getter: 返回search對象 getter返回對象:{name:’remind’,gender:’male’}。 setter: 設置query堪藐,有兩種方式莉兰。
1. location.search(′name′,′remind′);location.search(‘gender’,’male’); 這種方法是部分更新(part update)。 如果在一個angular周期中礁竞,只更新其中一個糖荒,如只執(zhí)行 $location.search(‘name’,’remind’) 那么gender會自動設置成空,如:http://a.com?name=remind&gender
2. location.search(name:′remind′,gender:′male′);這種方法是全體更新(wholeupdate)苏章。如果在一個angular周期中寂嘉,執(zhí)行l(wèi)ocation.search({name:’remind’}); 那么gender會被刪除,如 : http://a.com?name=remind 可以發(fā)現(xiàn)枫绅,設置方法類似jQuery設置css的方式泉孩,對比一下w3school.遺憾的是search不支持查詢某個特定值,例如location.search(‘name′)并淋,返回location對象而不是期待的name值寓搬。
Events
當調用$location.path(‘xxx’)使得地址變更時,以下事件會被廣播出去县耽,在angular的作用域(scope)中可以監(jiān)聽到此類事件句喷。
$locationChangeStart
在$location的path change之后,url change發(fā)生改變之前兔毙,此事件被廣播出去唾琼。url change可以被阻止,方法是調用此事件的preventDefault方法澎剥。
$locationChangeSuccess
當url change之后锡溯,此event被廣播出去。