作用域的原型繼承是非常簡單普遍的,甚至你不必關(guān)心它的運(yùn)作。直到你在子作用域中向父作用域的原始類型屬性使用雙向數(shù)據(jù)綁定2-way data binding,比如Form表單的ng-model為父作用域中的屬性,且為原始類型,輸入數(shù)據(jù)后,它不會(huì)如你期望的那樣運(yùn)行——AngularJS不會(huì)把輸入數(shù)據(jù)寫到你期望的父作用域?qū)傩灾腥?,而是直接在子作用域?chuàng)建同名屬性并寫入數(shù)據(jù)。這個(gè)行為符合JavaScript原型繼承機(jī)制的行為。AngularJS新手通常沒有認(rèn)識(shí)到ng-repeat、?ng-switch、ng-view和ng-include?都會(huì)創(chuàng)建子作用域, 所以經(jīng)常出問題。
2017-05-15
AngularJS中,子作用域一般都會(huì)通過JavaScript原型繼承機(jī)制繼承其父作用域的屬性和方法。但有一個(gè)例外:在directive中使用scope: { ... },這種方式創(chuàng)建的作用域是一個(gè)獨(dú)立的"Isolate"作用域,它也有父作用域,但父作用域不在其原型鏈上,不會(huì)對(duì)父作用域進(jìn)行原型繼承。這種方式定義作用域通常用于構(gòu)造可復(fù)用的directive組件。
作用域的原型繼承是非常簡單普遍的,甚至你不必關(guān)心它的運(yùn)作。直到你在子作用域中向父作用域的原始類型屬性使用雙向數(shù)據(jù)綁定2-way data binding,比如Form表單的ng-model為父作用域中的屬性,且為原始類型,輸入數(shù)據(jù)后,它不會(huì)如你期望的那樣運(yùn)行——AngularJS不會(huì)把輸入數(shù)據(jù)寫到你期望的父作用域?qū)傩灾腥?,而是直接在子作用域?chuàng)建同名屬性并寫入數(shù)據(jù)。這個(gè)行為符合JavaScript原型繼承機(jī)制的行為。AngularJS新手通常沒有認(rèn)識(shí)到ng-repeat、?ng-switch、ng-view和ng-include?都會(huì)創(chuàng)建子作用域, 所以經(jīng)常出問題。