AngularJS 和 CoffeeScript 问题

Posted

技术标签:

【中文标题】AngularJS 和 CoffeeScript 问题【英文标题】:AngularJS and CoffeeScript issue 【发布时间】:2014-02-27 12:56:05 【问题描述】:

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

这里是 javascript

$scope.$watch('results', function(results)
$scope.count = 0;
angular.forEach(results, function(result)
  if(result.selected)
    $scope.count += 1;
  
)
, true);

这工作得很好。现在我正在尝试在咖啡脚本中做同样的事情,这就是我所拥有的

$scope.$watch 'results', (results) ->
  $scope.count = 0;
  ( $scope.count += 1 if result.selected ) for result in $scope.results

上面的coffeescript没有编译错误,但是当我选择或取消选择复选框时没有任何反应。

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

$scope.$watch 'results', (results) ->
  $scope.count = 0;
  ( $scope.count += 1 if result.selected ) for result in $scope.results
, true

看看我如何将第三个参数true 传递给$watch。它对集合值进行深入检查,而不仅仅是检查引用相等性。


如果你只需要一个浅表,你应该使用 $watchCollection (angular >=1.2):

$scope.$watchCollection 'results', (results) ->
  $scope.count = 0;
  ( $scope.count += 1 if result.selected ) for result in $scope.results

这个是 100% 完全按照您提供的 javascript sn-p 编译的:

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

如果我不需要返回任何东西,我会明确使用return 检查这个:Is there any way to not return something using CoffeeScript?

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

这是编译好的咖啡脚本:

$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;
);

这与您上面的 JavaScript 示例的功能不同。

【讨论】:

以上是关于AngularJS 和 CoffeeScript 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将胖箭头AngularJS转换为coffeescript

使用 Coffeescript 设置 AngularJS 控制器属性不能是最后一行

AngularJS 承诺处理 CoffeeScript 类

使用 AngularJS、WebAPI 2 和 Oauth 2 时,如何将授权信息发送回我的客户端应用程序?

CoffeeScript,=> 和 -> 有啥区别 [重复]

没有 CoffeeScript 的 CoffeeScript 中的问号语法