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

Setting AngularJS controller property cannot be last line using Coffeescript

我正在使用 Coffeescript 并试图定义一个控制器,它将 使用 "HomeController as homeCtrl" 语法。

angular.module('myApp.controllers',[]).controller("HomeController", ->

    @someArray = []

    # return
)

这已损坏 - scope.homeCtrl 被设置为 [] 而不是对象 {someArray: []}。我意识到这是因为 Coffeescript 自动 returns 函数的最后一行,所以转译后 return this.someArray = [] returns [] 为函数。我可以通过取消注释裸露的 return 命令或什至像 return true@baz='foobar' 这样的命令来解决这个问题。但真正奇怪的是,只有当函数的最后一行 returns 是一个数组时,这才会搞砸。怎么回事?

那个问题快要死了!它实际上不仅仅是数组。养成在控制器末尾 return 的习惯。

编辑:更具体一点。 angular 使用 new 关键字将函数作为构造函数调用。构造函数行为在 This SO Post

中指定

您可以使用 CoffeeScript class 关键字来强制 CS 创建一个 class 构造函数:

angular.module('myApp.controllers',[]).controller "HomeController", class
  constructor: ->
    @someArray = []

或者,您可以创建名为 class,然后将其传递给 angular.js:

class HomeController
  constructor: ->
    @someArray = []

angular.module('myApp.controllers',[]).controller "HomeController", HomeController