javascript - AngularJS:将对象属性名称传递给指令

标签 javascript angularjs angularjs-directive

我正在编写一个 angular.js 指令,它是对象数组的可重用输入组件。

因为不可能在 ng-repeat 中使用原始值(参见:What is the angularjs way to databind many inputs?),我必须将一个对象数组传递给组件:

在我初始化的 Controller 中:

$scope.theSimpsons = [{ value: 'Bart' }, { value: 'Lisa' }];

然后在 HTML 文件中使用它:

<div ng-app="App">
    <div ng-controller="AppCtrl">
        <multi-input items="theSimpsons" />
    </div>
</div>

指令本身是这样实现的:

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>'
};
});

一切正常。

我的问题:如果对象没有怎么办?

此指令对属性名称 (value) 进行硬编码。但是,如果我想要一个像这样的数组:[{ name: 'Bart' }, { name: 'Lisa' }]

是否可以传递对象的名称,例如喜欢

<multi-input items="names" property="name"></multi-input>

并在指令中以某种方式使用它来访问 name 属性?

这是 JSFiddle http://jsfiddle.net/napU6/5/我已创建以显示此指令。

最佳答案

使用另一个属性来传递属性的名称

<multi-input items="myItems" name="value"></multi-input>

指令

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>'
  }
});

演示:Plunker

关于javascript - AngularJS:将对象属性名称传递给指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320224/

相关文章:

javascript - 根据 Angular Directive(指令)中的 id 更改 div 类

javascript - 将文本转换为 Canvas 图像,保留格式

javascript - 为 Angular 图创建动态对象

angularjs-directive - AngularJS - 在指令中使用局部变量

angularjs - 无法让传单弹出窗口与 angularjs 指令(和部分)一起使用

javascript - 来自服务的 $emit 或 $broadcast 事件并在一个(或多个) Controller 中监听它们

javascript - jquery点击函数效果

javascript - 根据 Material UI 中的用户输入使 TextField 错误为 true

javascript - 使用 AngularJS ng-bind-html 从 json 数据获取 img src

javascript - Uncaught Error : [$injector:modulerr] when using ng-repeat