Angular 1.5。组件 - 通过绑定属性区分父控制器的最佳方法是什么?

时间:2017-09-25 14:47:21

标签: angularjs angularjs-components angularjs-bindings

我有一个AngularJS 1.5组件,它代表一个带有ng-options的选择下拉列表。具体的事情是这些ng-options用不同的数据(来自常量文件)动态填充,具体取决于绑定到组件的name属性的值,它来自父控制器。
例如,我的组件如下所示:

test.component.js

angular
    .module('test.component')
    .component('Selector', {
        controller: Selector,
        controllerAs: 'vm',
        templateUrl: 'selector.html',
        bindings: {
            model: '=',
            form: '<',
            name:'@',
            label:'@',
            constant: '<',
        }
    });
    function Selector(CONSTANTS, SOME_OTHER_CONSTANTS) {
        var vm = this;
        switch(vm.name) {
            case 'Name1':
            vm.constant = CONSTANTS;
            break;

            case 'Name2' :
            vm.constant = SOME_OTHER_CONSTANTS;
            break;
        }

    }

所以在父控制器的视图中,它是这样的:
 的父 - view.html

<selector
  name="Name1"
  form="vm.myForm"
  model="vm.myModel>
</selector>

它运行正常但是通过name属性区分父控制器和数据可能不是一个好主意,因为它主要用于表单验证。为了区分父控制器以便能够根据不同的方式将不同的数据填充到ng-options中,最好使用什么?

任何帮助和建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果你只有2个这样的常数 - 使用if似乎没问题,如果你有20个不同的你可以使用注射器:

Instant

如果您有多个地方要按名称处理常量,可以尝试使用单独的工厂来存储所有这些小常量:

System.out.println(Instant.from(fmt.parse("2017-09-11T12:44:07.793Z"))); // 2017-09-11T12:44:07.793Z
System.out.println(Instant.from(fmt.parse("0001-01-01T00:00:00"))); // 0001-01-01T00:00:00Z