使用角不导致父母重新加载和重新绑定更新聚合物元件的儿童(Updating children of p

2019-09-29 17:46发布

tldr:当纸下拉菜单的孩子被角更新,家长不会重新加载或改变作出反应。 在“选择”选项不绑定到新的项目,例如,除非我们把它更新为好。 示例代码,请访问: https://github.com/dirtysanchez69/issue-angular2-polymer

说我有一个纸下拉菜单,因为这样(能正常工作):

//hardcoded options and selection

<paper-dropdown-menu label="hardcoded options and selection">
  <paper-listbox 
  [selected]="1"
  class="dropdown-content">
    <paper-item *ngFor="let option of ['hi', 'hello', 'yo']">{{option}}</paper-item>
  </paper-listbox>
</paper-dropdown-menu>

在这种情况下,孩子(纸项目)父(纸张列表框)之前大概解析,和家长选择它的孩子中的老二是选择的值。

现在,如果选择稍晚抵达,异步事件发生后,该选项(纸项目)更新就好了,但我们失去了选择的值。

//hardcoded selection

<paper-dropdown-menu label="hardcoded selection">
  <paper-listbox 
  [selected]="1"
  class="dropdown-content">
    <paper-item *ngFor="let option of dropdownOptions.fruit">{{option}}</paper-item>
  </paper-listbox>
</paper-dropdown-menu>

如果dropdownOptions.fruit与某些值初始化,我们可以看到所选择的价值,但在更新的选项,选定的值消失。

现在,如果我们也结合所选择的值,并且我们更新以及,在接收到新数据,则新的选择值被显示(万岁)。 但是,如果我们真正改变“选择”属性值这仅适用。 如果我们这个值初始化为1,那么我们必须从以触发更新(这还是给我们留下了一个问题),另一个号码。

<paper-dropdown-menu label="selection refresh" #fruitDropdown >
  <paper-listbox 
  [selected]="userData.fruitSelection"
  class="dropdown-content">
    <paper-item *ngFor="let option of dropdownOptions.fruit">{{option}}</paper-item>
  </paper-listbox>
</paper-dropdown-menu>

你觉得这怎么样? 有没有干净的方式强行触发聚合物元件上的重载?

Answer 1:

由于冈特Zöchbauer提到,在聚合物黑幕模式不能Angular2发挥好。 启用卷影模式在全球范围解决了这个问题。

背后的团队@ vaadin / angular2聚合物 (这里使用的集成库),是了解并在这个问题上的工作。 退房的问题 。

如果您遇到这样的困难,这个脚本添加到您的index.html

window.Polymer = {
  dom: 'shadow',
  lazyRegister: true
};


文章来源: Updating children of polymer elements using Angular doesnt cause parents to reload and rebind