Pass parameters to Dart Polymer element

前端 未结 3 1622
余生分开走
余生分开走 2021-01-06 00:05

The only solid example I could find for Dart Polymer doesn\'t use any parameters. How can I pass parameters to the template. Is it done through the constructor?

My s

相关标签:
3条回答
  • 2021-01-06 00:21

    The constructor of elements is called from Polymer and there is no way to pass parameters.

    You can as @Vloz wrote, assign values after the element was created or you can use binding as in the question you linked (Passing data to a Polymer element) using bindings.

    0 讨论(0)
  • 2021-01-06 00:31

    even though this is a bit old: You actually can pass parameters like this:

    <my-custom-element booleanAttr valueAttr="test"></my-custom-element>
    

    And your custom element should look something like:

    @CustomTag('my-custom-element')
    class MyCustomElement extends PolymerElement {
      ...
      @published bool booleanAttr;
      @published String valueAttr;
      ...
    }
    

    -- EDIT --

    But as already pointed out this can be easily done for polymerelements with a factory:

    import 'package:polymer/polymer.dart';
    import 'dart:html';
    
    @CustomTag('my-custom-element')
    class MyCustomElement extends PolymerElement {
      String a;
    
      factory MyCustomElement.custom(String _a) {
        MyCustomElemente = new Element.tag('my-custom-element');
        e..a = _a
        // ...
        ..initialized();
        return e;
      }
    
      MyCustomElement.created() : super.created() {
    
      }
    
      void initialized() {
        print("initialized: " + a);
      }
    }
    
    0 讨论(0)
  • 2021-01-06 00:43

    If you are creating a custom element you can use a factory constructor:

    class MyElement extends HtmlElement {
      int _foo;
      factory MyElement(int foo) => new Element.tag('my-tag').._foo = foo;
      MyElement.created() {
         // Careful _foo has not been assigned yet.
      }
    }
    
    main() {
       document.register('my-tag', MyElement);
       var element = new MyElement(42);
    }
    

    I assume this also works for PolymerElements, but I haven't tried this myself.

    0 讨论(0)
提交回复
热议问题