Polymer 为什么聚合物';的计算属性是否需要显式属性参数?

Polymer 为什么聚合物';的计算属性是否需要显式属性参数?,polymer,polymer-1.0,Polymer,Polymer 1.0,我对Polymer 1.0元素进行了深入研究,我对计算出来的属性有点好奇 例如,在paper drawer panel.html中 <dom-module id="paper-drawer-panel" …> … <div id="main" style$="[[_computeDrawerStyle(drawerWidth)]]"> … </div> … </dom-module> <script> Polym

我对Polymer 1.0元素进行了深入研究,我对计算出来的属性有点好奇

例如,在paper drawer panel.html

<dom-module id="paper-drawer-panel" …>
  …
  <div id="main" style$="[[_computeDrawerStyle(drawerWidth)]]">
    …
  </div>
  …
</dom-module>
<script>
Polymer({
  is: 'paper-drawer-panel',
  …
  _computeDrawerStyle: function(drawerWidth) {
    return 'width:' + drawerWidth + ';';
  },
  …
</script>

这种做法不好吗?

计算绑定中的显式参数有一个重要用途:告诉聚合物计算绑定依赖于哪些属性。这允许Polymer知道何时重新计算和更新计算的绑定

[[[u computeDrawerStyle()]]
为例。在这种情况下,Polymer不知道计算的绑定所依赖的其他属性,只会在加载时计算一次


一旦您显式地添加
drawerWidth
[[[u computeDrawerStyle(drawerWidth)]]
),Polymer现在就知道它应该在每次
drawerWidth
更改时为新值再次运行计算绑定。

我想您会感到困惑。您在这里的代码示例中所指的
style$=“[[[u computeDrawerStyle(抽屉宽度)]”
是对名为_computeDrawerStyle的私有函数的调用,当然您需要显式地为其提供正确的参数。查看文档以了解计算属性。

聚合物有两个不同的概念,您会混淆它们

  • 计算属性。这些属性依赖于其他属性,并且在其组件发生更改时重新计算。然后可以将该计算属性的值作为属性值进行数据绑定<代码>没有计算属性(我检查了代码)

  • 数据绑定中引用的函数调用(即
    \u computeDrawStyle
    )是什么。这使得聚合物在其任何参数发生变化时调用(元素的)该函数。这些参数都是属性(或者可以使用对象的子属性和数组的索引),这就是这里发生的情况


  • 啊好的,我明白了。我只是尝试从AngularJs应用程序开发转向聚合它。AngularJs使用一个摘要循环,这意味着如果范围中有更新,则每个计算表达式都会再次求值,因此视图会得到更新。。即使表达式的各个部分没有变化。我想聚合方式在性能方面更智能、更好。computeDrawerStyle不是计算属性,它是一个私有函数调用。
    [[_computeDrawerStyle()]]
    
    …
    
    _computeDrawerStyle: function () {
      return 'width:' + this.drawerWidth + ';';
    }