【发布时间】:2016-11-09 12:26:56
【问题描述】:
我已经构建了自己的 Angular 组件,可以通过使用其单独的 html 标记在我的代码中实现。所以我有这样的东西:
模板:
<div class="myComponent">
<div ng-transclude></div>
<span>{{ currentValue }}</span>
</div>
如您所见,我得到了一个跨度,它显示了来自我的控制器的绑定值。
在我的控制器中,我实现了这样的绑定:
static componentOptions = {
transclude: true,
bindings: {
currentValue: "="
}
}
我可以在我的网络应用程序中实现我的组件并为绑定提供如下值:
<my-component current-value="myVariable">
<input ng-model="myVariable">
</my-component>
比我从绑定中得到的结果(例如文本“hello world”)。现在我想更改绑定所在的控制器中的值。而且由于我的绑定中的"=",它在我的控制器以及它通过绑定来自的父级中被监视和更改。我是这样尝试的(在我的组件控制器中):
this.currentValue = "hello universe";
它不起作用,因为它是一个未知变量。如何使用组件控制器中的绑定并覆盖它等?在我的组件模板中,当我只使用绑定名称时,访问变量没有问题。
重要编辑:在这里,我试图向您展示图片会发生什么..
第 1 步:在这里您可以看到一个输入,其中定义了 myVariable,输入右侧是组件中的插件,我尝试使用双向绑定更改 myVariable..
第 2 步:现在我在输入中写入并覆盖 myVariable - 它以两种方式监视它并同时更改(myVariable 和组件中的绑定):
第 3 步:现在我更改组件控制器中的绑定 - 它仅在组件中更改,而不是在输入中更改,但我为此使用了两种方式绑定(由于 '='):
第 4 步:当我现在再次更改输入中的 myVariable 时,它再次更改了两者(单向绑定,但为什么)?:
我希望它足够清楚。
感谢和欢呼。
【问题讨论】:
-
无法理解是否需要更改子范围或父范围。无论如何似乎是范围隔离的问题。
-
@morels 我试着解释得更清楚一点,我有我的网络应用程序的 html,它有自己的控制器。在这个控制器中,我有一个值为“Hello world”的变量“X”。比我有一个自己的组件,它有自己的 html 模板和控制器。我可以使用自己的标签
在我的 Web 应用程序的 html 中的某处实现这个组件。现在这个组件在他的控制器中有一个名为 currentValue 的绑定,我可以在标签中使用它。现在,当标签在我的 html 中时,我可以将变量 X 赋予我的绑定..(第 2 部分即将推出) -
@morels 我可以将变量 X 和它的值从我的 html 传递到我的组件的控制器,并在我的组件的模板中显示它。现在我想在定义绑定的组件的控制器中更改它的值。而且由于我的绑定的“=”它也应该监视它,所以我的控制器中定义变量 X 的值也应该改变值。我该怎么做……现在清楚了吗?
-
@morels 请再次查看编辑(代码 sn-ps):在我使用 ng-model myVariable 输入的周围,我将组件标签与绑定一起放置在我传递 myVariable 的位置。比我使用 ng-transclude 将我的组件的模板与输入“合并”。在模板中,您可以看到跨度,我打印出绑定值(在输入右侧的图片中)。所以现在应该很清楚我希望...
标签: angularjs binding components