将$ scope.array时的一个值链接到ngRepeat指令模板

时间:2016-01-19 14:33:01

标签: angularjs angularjs-directive angularjs-ng-repeat

我已将我的代码简化为此示例,以显示我想要完成的任务。

控制器:

angular
   .module('myApp')
   .controller('myController', myController);

myController.$inject = ['$scope'];
function DashboardController($scope) {

$scope.someNumbers = [ 'One', 'Two', 'Three', 'Four', 'Five' ];

}

视图:

<table class="table table.hover">
    <tr class="table-row" ng-repeat="num in someNumbers track by $index" all-numbers="someNumbers" dyn-rows></tr>
</table>

指令:

angular
    .module('myApp')
    .directive('dynRows', function() {
        return {
            restrict: 'A',
            template: '<td>{{ allNumbers }}</td',
            scope: {
                allNumbers: "=",
            },
            link: function(scope,elem,attrs){
              // magic has to happen here?
            }
        }
    }
})

如果我理解得很好,我现在在视图中有5行,因为我的指令中有ng-repeat和5 models。所有5个指令模型都有allNumbers数组。

我想要完成的是,对于每个新行,我从someNumbers数组中获得一个值。 first row first value (一个)second row second value (两个)等等...... < / p>

我认为魔术必须发生在指令link内部或控制器视图内的指令链接()内部。经过几个小时的搜索和尝试循环和索引播放后,我似乎无法找到任何信息如何实现这一目标。

2 个答案:

答案 0 :(得分:2)

属性all-numbers="someNumbers"应为all-numbers="num",以便传入索引的值,而不是整个数组。

答案 1 :(得分:0)

在回答我自己的问题并在Daniel的帮助下,我找到了解决问题的最佳方案。

正如我所提到的,上面的例子只是我真实代码的一个小例子。

在我的实际代码中,我有多个数组(长度相同)。我想每个ngRepeat发送一个每个数组的值。

原始代码行

<tr class="dashboard-table-row" ng-repeat="labels in properLabels track by $index" dashboard-table all-labels="properLabels" all-years="properYears" all-data="properData"></tr>

已更改为

<tr class="dashboard-table-row" ng-repeat="labels in properLabels track by $index" dashboard-table all-labels="{{properLabels[$index}}" all-years="properYears" all-data="{{properData[$index]}}"></tr>

添加[$index]我传递数组的地方只发送数组中N索引位的值到我的指令。

希望这有助于未来的人们!