Mor*_*sen 5 javascript angularjs angularjs-directive
我正在编写一个angular.js指令,它是一个对象数组的可重用输入组件.
由于不可能使用原始值ng-repeat(参见:对于数据绑定许多输入的angularjs方法是什么?),我必须将一个对象数组传递给组件:
在控制器中我初始化:
$scope.theSimpsons = [{ value: 'Bart' }, { value: 'Lisa' }];
Run Code Online (Sandbox Code Playgroud)
然后在HTML文件中使用它:
<div ng-app="App">
<div ng-controller="AppCtrl">
<multi-input items="theSimpsons" />
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
该指令本身实现如下:
directive('multiInput', function () {
return {
restrict: 'E',
scope: {
items: '=items'
},
template:
'<div>' +
'<div ng-repeat="item in items">' +
'<input type="text" ng-model="item.value">' +
'<a ng-click="items.splice($index, 1)">remove</a>' +
'</div>' +
'<a ng-click="items.push({value:\'\'})">add</a>' +
'</div>'
};
});
Run Code Online (Sandbox Code Playgroud)
这一切都很好.
我的问题:如果对象没有value?
该指令value很难对property()的名称进行编码.但是,如果我想拥有这样一个阵列:[{ name: 'Bart' }, { name: 'Lisa' }].
是否可以传递对象的名称,例如
<multi-input items="names" property="name"></multi-input>
Run Code Online (Sandbox Code Playgroud)
并在指令中以某种方式使用它来访问name属性?
这是我创建的JSFiddle http://jsfiddle.net/napU6/5/来显示这个指令.
使用另一个属性来传递属性的名称
<multi-input items="myItems" name="value"></multi-input>
Run Code Online (Sandbox Code Playgroud)
指示
app.directive('multiInput', function(){
return {
restrict: 'E',
replace: true,
scope: {
items:'=',
name: '@'
},
template:'<div>'
+ '<div ng-repeat="item in items">'
+ '<input type="text" ng-model="item[name]">'
+ '<a ng-click="items.splice($index, 1)">remove</a>'
+ '</div>'
+ '<a ng-click="items.push({})">add</a>'
+ '</div>'
}
});
Run Code Online (Sandbox Code Playgroud)
演示:Plunker