javascript - link - w3school angularjs directive




為什麼在AngularJS指令中不推薦使用`replace`屬性? (3)

UPDATE

其中一名合作者表示不會被刪除,但已知的錯誤不會被修復。 https://github.com/angular/angular.js/commit/eec6394a342fb92fba5270eee11c83f1d895e9fb#commitcomment-8124407

原版的

以下是此更改的提交: https://github.com/angular/angular.js/commit/eec6394a342fb92fba5270eee11c83f1d895e9fbhttps://github.com/angular/angular.js/commit/eec6394a342fb92fba5270eee11c83f1d895e9fb

用於定義替換它們所在元素的replace標誌將在下一個主要角度版本中被刪除。 這個特徵具有困難的語義(例如,如何合併屬性)並導致與其解決的問題相比更多的問題。 另外,使用WebComponents時,在DOM中使用自定義元素是正常的。

在我看來,它似乎是維持支持的複雜性與益處的結合。

顯然,開發人員使用它的一個原因是因為他們首選注入語義正確的標記,因此替換了自定義指令標記。

閱讀關於該鏈接的評論,顯然很多人希望它留下來。

根據API文檔 ,指令的replace屬性已被棄用,所以將來,所有指令都會以當前默認的replace: false

這就消除了開發人員替換元素指令元素的能力,而沒有明顯的替代這個功能。

查看這個plunk了解元素指令如何使用和不使用replace: true的例子replace: true

為什麼這個有用的屬性被棄用而沒有替換?


來自GitHub:

Caitp--它已被棄用,因為有人知道, replace: true非常愚蠢的問題replace: true ,其中一些問題無法真正以合理的方式得到修復。 如果你小心並避免這些問題,那麼給你更多的權力,但為了新用戶的利益,只是告訴他們“這會讓你頭痛,不要這樣做”。

- AngularJS問題#7636

replace:true已棄用

從文檔:

replace ([DEPRECATED!])將在下一個主要版本中被移除 - 即v2.0)

指定模板應該替換的內容。 默認為false

  • true - 模板將替換指令的元素。
  • false - 模板將替換指令元素的內容。

- AngularJS綜合指令API


我會說這是一件好事,因為它會阻止你將指令(組件)的內部運作暴露給外部世界,所以它已被刪除。 看看你的模板是一個影子DOM,並將你的指令與一個普通的HTML元素(比如按鈕)進行比較。當你懸停或點擊它們時,你不會看到添加的所有類以及應用於這些元素的樣式。 這一切都隱藏在裡面。 由於目前對影子DOM的支持有所限制,這是一種解決方法,但它已經使您能夠成為未來的證明。





angularjs-directive