Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:在ng repeat中调用控制器函数_Javascript_Angularjs_Function_Angularjs Ng Repeat - Fatal编程技术网

Javascript AngularJS:在ng repeat中调用控制器函数

Javascript AngularJS:在ng repeat中调用控制器函数,javascript,angularjs,function,angularjs-ng-repeat,Javascript,Angularjs,Function,Angularjs Ng Repeat,我的控制器如下所示: controller('MonthlyCalendarController', ['$scope', function($scope) { $scope.counter = 0; $scope.increment = function() { $scope.counter++; console.log($scope.counter); } }]) <div ng-repeat="x in y track

我的控制器如下所示:

controller('MonthlyCalendarController', ['$scope', function($scope) {
    $scope.counter = 0;

    $scope.increment = function() {
        $scope.counter++;
        console.log($scope.counter);
    }
 }])
 <div ng-repeat="x in y track by $index" ng-init="increment()">
counter: {{counter}}
 </div>
我的HTML看起来像这样:

controller('MonthlyCalendarController', ['$scope', function($scope) {
    $scope.counter = 0;

    $scope.increment = function() {
        $scope.counter++;
        console.log($scope.counter);
    }
 }])
 <div ng-repeat="x in y track by $index" ng-init="increment()">
counter: {{counter}}
 </div>

计数器:{{counter}}
我的输出每次都是这样。它只显示“1”:

计数器:1
It console.logs()正确;记录增量数字。然而,我的HTML输出每次只有“1”。仅仅输出$index是不够的,因为我正在我的
increment()
函数和
$scope.counter
!=$索引
。有什么想法吗?

“仅仅输出$index是不够的,因为我正在增量()函数中进行其他运算,$scope.counter将!=$index。有什么想法吗?”

您仍然可以通过以下方式使用
$index

<div ng-repeat="x in y track by $index">
  counter: {{increment($index)}}
</div>
$index返回重复元素的迭代器偏移量(0..length-1)

计数器
值为双向绑定,因此它将一直打印最后一个值

使用将给出迭代器偏移量的
$index

试试这个:

var myApp=angular.module('myApp',[]);
myApp.controller(“MonthlyCalendarController”,MonthlyCalendarController);
功能月CalendarController($scope){
$scope.y=[0,1,2,3,4,5,6,7,8,9];
$scope.counter=0;
$scope.increment=函数(){
$scope.counter++;
console.log($scope.counter);
}
}

计数器:{{$index+1}

您可以使用
ng init
函数设置每个项目的值:

为了证明我们可以独立于索引计算每个项目,下面的示例为每个项目分配下一个斐波那契数

您的模板:

  <div ng-repeat="x in y track by $index" ng-init="increment(x)">
      <strong>{{x.counter }}</strong>: {{ x.name}} 
  </div>
结果:

1: One
2: Two
3: Three
5: Four
8: Five
.

您可以使用指令:

现场示范

var myApp=angular.module('myApp',[]);
myApp.controller(“MonthlyCalendarController”,MonthlyCalendarController);
功能月CalendarController($scope){
$scope.y=[0,1,2,3,4,5,6,7,8,9];
$scope.counter=0;
$scope.increment=函数(){
$scope.counter++;
console.log($scope.counter);
}
}
myApp.directive('increment',function(){
返回{
限制:'A',
是的,
范围:{
增量:“=”,
内部增量:“=”,
},
模板:“”,
链接:功能(范围、要素、属性){
scope.$parent.increment=scope.increment;
}
}
});

计数器{{increment}

您试图实现的目标是什么导致您尝试这种方法?我正在构建一个日历,但ng repeat实际上与要调用的函数无关。我只需要在每次重复发生时调用函数。这就是为什么我在ng repeat中使用“x in y”;只是为了说明这个概念。但更详细地说,这是日历中的“天”,根据日历的值,在“天”中会显示不同的内容。调用括号中的函数而不是ng-init()似乎解决了我的问题。谢谢
1: One
2: Two
3: Three
5: Four
8: Five