【问题标题】:AngularJS How to convert component two-way binding to one-way bindingAngularJS如何将组件双向绑定转换为单向绑定
【发布时间】:2018-07-13 17:19:10
【问题描述】:

您好,将 angularJS 中的两种方式数据绑定转换为一种方式的正确方法是什么?

我有组件

import template from './test.component.html';
import controller from './test.controller';

export const DateWrapperComponent = {
  bindings: {
    test: '='
  },
  template,
  controller
};

控制器

export default function TestController($scope) {
  /* ngInject */

  $scope.$watch('$ctrl.test', () => {
     console.log(this);
  });
}

并查看:

<input type="text" ng-model="$ctrl.test">

什么是正确的转换方法?

【问题讨论】:

标签: angularjs angularjs-components


【解决方案1】:

使迁移到 Angular 2+ 更容易

将 AngularJS 与 = 的双向绑定转换为将 &lt; 的单向绑定用于输入,将&amp; 的表达式绑定用于输出:

app.component("testComponent", {
    bindings: {
        sample: '<',
        sampleChange: '&',
    },
    template: `
        <fieldset>
            <input ng-model="$ctrl.sample"
                   ng-change="$ctrl.sampleChange({$event: $ctrl.sample})"
            />
        </fieldset>
    `,
});

用法:

<test-component sample="test" sample-change="test=$event">
</test-component>

TEST={{test}}

这样做的原因是它使迁移到 Angular 2+ 更容易。 Angular 2+ 没有与= 的双向绑定。

有关详细信息,请参阅


Angular 2+ 双向绑定

使用 Angular 2+,双向绑定(盒装香蕉):

<app-sizer [(size)]="fontSizePx"></app-sizer>

是语法糖:

<app-sizer [size]="fontSizePx" (sizeChange)="fontSizePx=$event"></app-sizer>

有关详细信息,请参阅

【讨论】:

    【解决方案2】:

    您似乎想将 test 值从消费者组件传递给您的组件,但是当您的组件更改该值时,它不应反映回消费者组件值。所以你可以在bindings 选项中使用&lt;(单向绑定)而不是=(双向绑定)。内部绑定&lt; 确保数据将以单向方式(从上到下)流动。

    export const DateWrapperComponent = {
      bindings: {
        test: '<'
      },
      template,
      controller
    };
    

    注意:此功能适用于1.5.x 版本当component AngularJS 中引入了 API

    【讨论】:

    • 但我需要将数据从视图发送到组件而不是从组件发送到视图以一种数据绑定方式,这可能吗?
    • @axlpl 不确定你问了什么?你能详细说明一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多