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

Setting AngularJS controller property cannot be last line using Coffeescript

本文关键字:最后 一行 Coffeescript 控制器 AngularJS 属性 不能 设置      更新时间:2023-09-26

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

angular.module('myApp.controllers',[]).controller("HomeController", ->
    @someArray = []
    # return
)

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

那个问题简直要了我的命!实际上不仅仅是数组。只要养成习惯,在控制器的末端返回即可。

编辑:更具体一点。它的angular使用new关键字作为构造函数调用函数。构造函数行为是按照本SO Post 中的规定来指定的

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

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

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

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