Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
AngularJS和咖啡脚本问题_Angularjs_Coffeescript - Fatal编程技术网

AngularJS和咖啡脚本问题

AngularJS和咖啡脚本问题,angularjs,coffeescript,Angularjs,Coffeescript,所以我对AngularJS和CoffeeScript都是新手。我正在尝试一些简单的例子,我正在尝试做的是显示选中复选框的数量 下面是用于此的Javascript $scope.$watch('results', function(results){ $scope.count = 0; angular.forEach(results, function(result){ if(result.selected){ $scope.count += 1; } }) }, true);

所以我对AngularJS和CoffeeScript都是新手。我正在尝试一些简单的例子,我正在尝试做的是显示选中复选框的数量

下面是用于此的Javascript

$scope.$watch('results', function(results){
$scope.count = 0;
angular.forEach(results, function(result){
  if(result.selected){
    $scope.count += 1;
  }
})
}, true);
这个很好用。现在我正试图在coffeescript中做同样的事情,这就是我所拥有的

$scope.$watch 'results', (results) ->
  $scope.count = 0;
  ( $scope.count += 1 if result.selected ) for result in $scope.results
上面的coffeescript中没有编译错误,但是当我选中或取消选中复选框时,不会发生任何事情


有什么想法吗?

这是编译好的咖啡脚本:

$scope.$watch('results', function(results) {
  var result, _i, _len, _ref, _results;
  $scope.count = 0;
  _ref = $scope.results;
  _results = [];
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    result = _ref[_i];
    _results.push(result.selected ? $scope.count += 1 : void 0);
  }
  return _results;
});
$scope.$watch('results',函数(results){
var结果,_i,_len,_ref,_结果;
$scope.count=0;
_ref=$scope.results;
_结果=[];
对于(_i=0,_len=_ref.length;_i<_len;_i++){
结果=_ref[_i];
_results.push(result.selected?$scope.count+=1:void 0);
}
返回结果;
});
这与上面的JavaScript示例的功能不同。

您可以将JavaScript转换为coffeescript,反之亦然。
这就是结果,我相信它应该做你想要的:

$scope.$watch "results", ((results) ->
  $scope.count = 0
  angular.forEach results, (result) ->
    $scope.count += 1  if result.selected
), true

您在语法中使用的
for是正确的,但您忘记了第三个参数:

$scope.$watch 'results', (results) ->
  $scope.count = 0;
  ( $scope.count += 1 if result.selected ) for result in $scope.results
, true
看看我如何传递给
$watch
第三个参数
true
。它对集合值进行深入检查,而不仅仅是检查引用相等性


如果您只需要浅表,则应使用$watchCollection(角度>=1.2):


这一个完全按照您提供的javascript代码段编译:

$scope.$watch "results", (results) ->
  $scope.count = 0
  angular.forEach results, (result) ->
    $scope.count += 1  if result.selected
    return
  return
, true
如果我不需要返回任何内容,我会显式地使用
return
选中此项:

$scope.$watch "results", (results) ->
  $scope.count = 0
  angular.forEach results, (result) ->
    $scope.count += 1  if result.selected
    return
  return
, true