[英]Angular 1.5+ component optional one-way binding
取自AngularJS 1 文檔 :
您還可以通過添加來使綁定可選
?
:<?
或<?attr
。
對於單向綁定,可選項與非可選項有何不同?
我似乎可以在我的小提琴上找出可選版本的雙向( =
)和委托( &
)綁定的差異: https : //jsfiddle.net/glenn/ze2wo0s1/ ,但不是單向的一。
順便說一下,聖誕快樂! 🎅🏻🎄❤️
您可以在源代碼中看到它的處理方式: https : //github.com/angular/angular.js/blob/master/src/ng/compile.js#L3523 。
對我來說,如果你使用<?
並使綁定可選,它提前打破而不設置手表。 如果使用<
並使其成為必需,它會將綁定設置為undefined
並設置監視。 但是,它看起來只是看undefined
,所以在實踐中,除了對recordChanges
一次調用之外沒有任何區別。 在省略所需綁定的情況下,所需的綁定將是在第一次調用時傳遞給$onChanges
掛鈎的changes
對象中的鍵。 但是,當您省略可選綁定時,它將不是changes
對象中的鍵。
有關示例,請參閱此JSFiddle 。 requiredBinding
和optionalBinding
都被省略,因此,初始化為undefined
,但requiredBinding
是change
對象上的鍵,而optionalBinding
則不是。
使用<?
只有當該變量不存在時,控制器才能更改應該綁定的變量的值。
當控制器不存在時,可以在控制器中修改它們。 如果值傳遞給組件,則無法更改它。
無法修改非可選綁定。 如果它們不存在,則它們是undefined
,根本不能修改它們。
例如,假設你有這個:
bindings: {
nameOptional: '<?',
nameRequired: '<'
}
在控制器中,您不能簡單地執行$ctrl.nameRequired = 'something else'
並期望視圖得到更新。 但是,您可以使用一個條件對nameOptional
執行相同nameOptional
:僅當name-optional
未傳遞給組件時。 只有這時變量才是要改變的控制器。
為了更好地理解你可以參考這個小提琴 。
請注意,為簡化事物,我們使用的是一個按值傳遞的字符串。 如果要傳遞對象,則可以在正常條件下始終修改對象的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.