【问题标题】:Work with binding within controller of component在组件的控制器内使用绑定
【发布时间】: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


【解决方案1】:

在 AngularJS 1.5 中,您的控制器实例将在相应模板中以 $ctrl 的形式提供。试试

{{$ctrl.currentValue}}

相反。此外,如果您使用两种方式绑定(由于 '=')myVariable

<my-component current-value="myVariable">

必须在父作用域上定义。也许试试

<my-component current-value="'myVariable'">

最初只是为了看看它是否有效..

【讨论】:

  • 嗨,我用 $ctrl 试过它不起作用。我还在 myVariable 周围加上 '',它只是显示一个字符串“myVariable”而不是值。我所拥有的是,当 myVariable 的值为“ABC”时,我可以在组件的模板中看到这一点。当我将组件控制器中的值覆盖为“ABC123”时,在我的模板中它显示正确,但在父 myVariable 中它仍然是“ABC”。比我将 myVariable 覆盖为“123”,它在模板中再次更新它并显示“123”而不是“ABC123”......我使用“=”进行绑定,它只是以一种方式而不是两种方式观看它。 .
猜你喜欢
  • 2018-03-05
  • 2017-05-22
  • 2013-01-28
  • 2014-10-18
  • 2016-10-26
  • 2017-05-10
  • 2016-10-11
  • 2012-11-02
  • 2017-09-28
相关资源
最近更新 更多