1
覆蓋三種生命週期方法WebComponent
:created()
,inserted()
和removed()
之後,我可以看到頭兩個被一致調用,但從未調用過removed()
。有沒有什麼特別的事情需要完成,removed()
被稱爲?或者它從來沒有被稱爲?是否調用過WebComponent.removed()?
覆蓋三種生命週期方法WebComponent
:created()
,inserted()
和removed()
之後,我可以看到頭兩個被一致調用,但從未調用過removed()
。有沒有什麼特別的事情需要完成,removed()
被稱爲?或者它從來沒有被稱爲?是否調用過WebComponent.removed()?
當自定義元素從DOM中刪除時,將調用removed()
方法。這是一個小程序,演示使用created()
,inserted()
和removed()
生命週期事件。
與index.html
文件看起來像這樣創建一個飛鏢Web應用程序:
<!DOCTYPE html>
<html>
<head>
<title>index</title>
<link rel="import" href="my_element.html">
<script src="packages/polymer/boot.js"></script>
</head>
<body>
<div id='container'><my-element></my-element></div>
<script type="application/dart">
import 'dart:html';
void main() {
query('#container').onClick.listen((event) {
event.target.remove();
});
}
</script>
</body>
</html>
此文件導入,並顯示一個自定義元素,<my-element>
。
定義下列文件,定義<my-element>
:
<!DOCTYPE html>
<html>
<body>
<polymer-element name="my-element">
<template>
<p>The name is {{person.name}}</p>
</template>
<script type="application/dart" src="my_element.dart"></script>
</polymer-element>
</body>
</html>
,並定義演示獲取調用生命週期方法附帶的飛鏢文件:
import 'package:polymer/polymer.dart';
class Person extends Object with ObservableMixin {
@observable String name;
Person(this.name);
}
@CustomTag("my-element")
class MyElement extends PolymerElement {
@observable Person person = new Person('Shailen');
void created() {
super.created();
print('created');
}
void inserted() {
print('inserted');
}
void removed() {
print('removed');
}
}
當您運行index.html
,你會看到一個段落有一些文字在裏面。將調用created()
和inserted()
生命週期方法,並在控制檯中打印「創建」和「插入」消息。當您單擊包含自定義元素的div時,該元素將被移除,調用removed()
生命週期方法,並在控制檯中打印「已移除」。
希望這會有所幫助。
非常感謝您的幫助!不幸的是,我的問題並不確切。我不明確刪除組件,而是使用條件模板實例化組件。我也不使用聚合物庫。考慮到我如何提出這個問題,我必須將你的答案作爲正確答案。我將盡快遷移到聚合物庫,可能這種遷移將解決我目前的問題。再次感謝您的時間! – Y2i