Angular 1.5。组件 - 通过绑定 属性 区分 parent 控制器的最佳方法是什么?
Angular 1.5. component - what is the best way to distinguish the parent controller via binded property?
我有一个 AngularJS 1.5 组件,它表示带有 ng-options 的 select 下拉列表。具体的是,这些 ng-options 动态填充不同的数据(来自常量文件),具体取决于绑定到组件的名称 属性 的值,它来自 parent 控制器。
例如,我的组件如下所示:
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;
}
}
所以在parent控制器的视图中是这样的:
parent-view.html
<selector
name="Name1"
form="vm.myForm"
model="vm.myModel>
</selector>
它工作正常,但通过 name
属性 区分 parent 控制器和数据可能不是一个好主意,因为它主要用于表单验证。为了区分 parent 控制器以便能够根据此将不同的数据填充到 ng-options 中,最好使用什么?
任何帮助和建议将不胜感激。
如果您只有这些常量中的 2 个 - 使用 if 似乎没问题,如果您有 20 个不同的常量,您可以使用注入器:
function Selector($injector) {
var vm = this;
vm.constant = $injector.get(constantProvider);
}
<selector
constant-provider="SOME_OTHER_CONSTANTS"
form="vm.myForm"
model="vm.myModel>
</selector>
如果你有多个地方想通过名称寻址常量,你可以尝试创建单独的工厂来存储所有这些小常量:
module.factory('MyConstants', function(CONSTANTS, SOME_OTHER_CONSTANTS) {
return {
name1: CONSTANTS, name2: SOME_OTHER_CONSTANTS
}
});
我有一个 AngularJS 1.5 组件,它表示带有 ng-options 的 select 下拉列表。具体的是,这些 ng-options 动态填充不同的数据(来自常量文件),具体取决于绑定到组件的名称 属性 的值,它来自 parent 控制器。
例如,我的组件如下所示:
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;
}
}
所以在parent控制器的视图中是这样的:
parent-view.html
<selector
name="Name1"
form="vm.myForm"
model="vm.myModel>
</selector>
它工作正常,但通过 name
属性 区分 parent 控制器和数据可能不是一个好主意,因为它主要用于表单验证。为了区分 parent 控制器以便能够根据此将不同的数据填充到 ng-options 中,最好使用什么?
任何帮助和建议将不胜感激。
如果您只有这些常量中的 2 个 - 使用 if 似乎没问题,如果您有 20 个不同的常量,您可以使用注入器:
function Selector($injector) {
var vm = this;
vm.constant = $injector.get(constantProvider);
}
<selector
constant-provider="SOME_OTHER_CONSTANTS"
form="vm.myForm"
model="vm.myModel>
</selector>
如果你有多个地方想通过名称寻址常量,你可以尝试创建单独的工厂来存储所有这些小常量:
module.factory('MyConstants', function(CONSTANTS, SOME_OTHER_CONSTANTS) {
return {
name1: CONSTANTS, name2: SOME_OTHER_CONSTANTS
}
});