2013-08-27 24 views
1

覆蓋三種生命週期方法WebComponentcreated(),inserted()removed()之後,我可以看到頭兩個被一致調用,但從未調用過removed()。有沒有什麼特別的事情需要完成,removed()被稱爲?或者它從來沒有被稱爲?是否調用過WebComponent.removed()?

回答

5

當自定義元素從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()生命週期方法,並在控制檯中打印「已移除」。

希望這會有所幫助。

+0

非常感謝您的幫助!不幸的是,我的問題並不確切。我不明確刪除組件,而是使用條件模板實例化組件。我也不使用聚合物庫。考慮到我如何提出這個問題,我必須將你的答案作爲正確答案。我將盡快遷移到聚合物庫,可能這種遷移將解決我目前的問題。再次感謝您的時間! – Y2i

相關問題