【问题标题】:Using angular-dart components, supply own instances instead of calling the constructor使用 angular-dart 组件,提供自己的实例而不是调用构造函数
【发布时间】:2013-12-09 15:59:22
【问题描述】:

在 angular-dart 中可以创建自己的组件,如 here 所示。如果您像这样在 html 中使用自定义标签:

<rating></rating>

angular 将通过调用与评级相关的类的构造函数来创建一个组件,在本例中为 new RatingComponent() (如果我没记错的话)。

我知道您可以添加属性以对其进行一些控制,但我想知道是否可以提供您自己的实例,而不是 Angular 调用构造函数。如果我在主控制器中有一个按钮列表怎么办,如何实现这样的:

<div ng-repeat='b in ctrl.buttonList'>
    <fancy-button instance='b'></fancy-button>
</div>

我感觉我遗漏了一些明显的东西,但我确实四处寻找并找不到答案。

edit(用于额外说明):我认为这归结为是否可以通过角度影响/绕过构造函数的调用。如果它只是关于生成 html,它很容易不使用该组件而只使用主控制器(如下所示)生成 html,但如果可能的话,我想使用一个组件,因为它也有用于沙箱的 shadow-dom CSS。

<div ng-repeat='b in ctrl.buttonList'>
    <input type='button' class='fancy' value='{{b.label}}'></input>
</div>

【问题讨论】:

  • 负责花式按钮的类可以检查instance 属性并对其值执行switch 并执行不同的操作。作为另一种可能性,您(也许)可以声明一个在实例属性的特定值上触发的组件。 @NgComponent('selector':'fancy-button[instance=unicorn]', …) class MyUnicornButton { … }(链接到 (java;(doc goo.gl/j0tYCg) 并让角度处理器通过反射对其进行排序。如果这是您的想法并且您有兴趣,我可以尝试一下并发布示例如果它的某些工作。

标签: dart angular-dart


【解决方案1】:

你想要类似的东西

<div ng-bind-html='ctrl.html'></div>

这样你就可以通过控制器提供html了。

不过,您必须创建自己的 NgBindHtmlDirective 实现(只需几行代码),因为使用的 ng-bind-html 的 NodeValidator 还不允许自定义标签。

也许还有更复杂的方法,但我对 Angular 还不是很了解。

=== 编辑 ===

我认为您尝试做的不是 Angularish。 您可以对提供精美按钮或输入属性值的模型进行 ng-repeat。 在组件类中,您可以访问这些属性,并且可以根据这些属性来制作行为和外观。

如果您在开发时不知道要使用哪种标签,则可以使用 ng-bind-html 使用代码创建标记。

【讨论】:

  • 也许我不明白你的意思,但 instance 是我为了表达我的意图而编造的。 Afaik 没有这样的属性来防止 Angular 调用构造函数。
  • 抱歉,第一个答案不适合问题。我已经编辑了答案。不过,可能有更好的方法来做到这一点。
  • 感谢您的尝试。我正在专门寻找一种绕过对构造函数的调用的方法。如果那不可能,我正在考虑提供 angular 参数以在工厂构造函数上使用。然后工厂构造函数可以只返回参数本身。但这当然是一个非常丑陋的解决方案,我不知道如何通过角度影响构造函数调用。
  • 我不确定使用 ng-bind-html 会有什么帮助,除非我自己生成所有的 html。
  • 我认为您可以在运行时生成标签和属性,从而实现您想要的行为。也许您可以提供一个更具体的示例,以实现您想要实现的目标。我的 Angular 知识和关于一个人可以做什么的想象力仍然非常有限:-|
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多