将AngularJS 1.1.5与CoffeeScript一起使用我正在尝试使用新的“Controller as ...”语法,如下所示:
class EventCtrl
@$inject = ['$scope', '$http']
constructor: (@$scope, @$http) ->
@$http.get('/some/url/', config)
.success (data) ->
#set the events directive
@events = data
.error (data) ->
console.log('error!')
app.controller('EventCtrl', EventCtrl)
使用以下HTML片段:
<div ng-controller="EventCtrl as ctrl">
<div>{{ctrl.events}}</div>
</div>
除了@events中的更改不更新(模板中的绑定点)这一事实外,这项工作正常。在success
的{{1}}处理程序中传入的“数据”看起来还不错。
此代码一直在使用以前版本的AngularJS和常规的非类控制器。
更新
一个(丑陋的)解决方案是明确地将@$http.get
(this
)设置为方法中的本地值(下例中的@
)。不是很优雅,但它有效。
thiz
解
对class EventCtrl
@$inject = ['$scope', '$http']
constructor: (@$scope, @$http) ->
thiz = @
@$http.get('/some/url/', config)
.success (data) ->
#set the events directive
thiz.events = data
.error (data) ->
console.log('error!')
处理程序使用胖箭头。构造函数会自动附加到实例,因此不需要胖箭头(如果它不是构造函数,那就是它。)
success
答案 0 :(得分:2)
您应该将其附加到scope
,而不是@
(如果.success
更改了上下文,则可能不是您的类实例。您可以使用coffeescript的胖箭头这一点)。
另外,使用init
方法有什么意义?这正是构造函数的目的。