用于AngularJS的基于CoffeeScript类的控制器不会更新模板

时间:2013-10-23 07:51:20

标签: angularjs coffeescript

将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.getthis)设置为方法中的本地值(下例中的@)。不是很优雅,但它有效。

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

1 个答案:

答案 0 :(得分:2)

您应该将其附加到scope,而不是@(如果.success更改了上下文,则可能不是您的类实例。您可以使用coffeescript的胖箭头这一点)。

另外,使用init方法有什么意义?这正是构造函数的目的。