使用 Coffeescript 设置 AngularJS 控制器属性不能是最后一行
Posted
技术标签:
【中文标题】使用 Coffeescript 设置 AngularJS 控制器属性不能是最后一行【英文标题】:Setting AngularJS controller property cannot be last line using Coffeescript 【发布时间】:2015-05-27 23:07:34 【问题描述】:我正在使用 Coffeescript 并试图定义一个控制器,它将 使用“HomeController as homeCtrl”语法。
angular.module('myApp.controllers',[]).controller("HomeController", ->
@someArray = []
# return
)
这已损坏 - scope.homeCtrl
设置为 []
而不是对象 someArray: []
。我意识到这是因为 Coffeescript 自动返回函数的最后一行,所以转译后的 return this.someArray = []
返回函数的 []
。我可以通过取消注释 return
命令,甚至像 return true
或 @baz='foobar'
这样的命令来解决这个问题。但真正奇怪的是,只有当函数的最后一行返回一个数组时,这才会搞砸。怎么回事?
【问题讨论】:
【参考方案1】:那个问题让我快死了!它实际上不仅仅是数组。只需养成在控制器结束时返回的习惯即可。
编辑:更具体地说。它使用 new 关键字将函数作为构造函数调用。构造函数行为在This SO Post中指定
【讨论】:
是的,这肯定是解决方案。然而,我对它为什么这样做很感兴趣。 @StevenClontz 这是因为 Angular 在函数上使用了 'new' 关键字。因为它是一个构造函数,返回值就是实例,所以返回任何其他东西会让 javascript 认为那是你的实例。省略返回值会返回“this”,这将是控制器本身。由于coffeescript 是自动返回的,我们只剩下这种行为了:) 太棒了,这正是我想要的。【参考方案2】:您可以使用 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
【讨论】:
以上是关于使用 Coffeescript 设置 AngularJS 控制器属性不能是最后一行的主要内容,如果未能解决你的问题,请参考以下文章
CoffeeScript中对于在NetBeans 8.0插件:设置目标文件夹JS编译