2013-05-31 59 views
1

我有以下通用代码。我可以改进这个AngularJS/AJAX javascript代码片段吗?

MyClass.prototype.doSomething = function() { 

    $.ajax({ 
     url: turl, 
     dataType: 'jsonp', 
     success: function (_this) { //closure 
      return function (data) { 
       _this._angular_scope.$apply(function() { 

        _this.property = // extract stuff from 'data' 
        _this.analyzeContent() // do more stuff with it 
       }) 
      } 
     }(this) 
    }) 
} 

基本上,这只是一个普通的AJAX调用。有一个...

(1)关闭了“这个”,这样的成功函数可以访问我的对象和它的状态

(2)里面,我返回的数据进行一些功能,但是...

(3)我希望AngularJS能捕获成功的所有东西,所以这个解析数据的函数进一步将它的动作包装在$ apply调用中。

这有效,但我不禁想知道是否有更好的方法来实现这一点。这是正确的,因为嵌套函数的数量,我必须考虑每次看到它时所做的事情。

这样好吗,还是有更好的推荐风格?

回答

5

我假设这个代码块位于角度服务,控制器或指令内部。如果不是,那么手头上就有更广泛的问题。 Angularjs带有一个$http服务,该服务应该用于替代$ .ajax。 $ http提供的所有功能与$ .ajax相同,并且可以测试,并与angularjs摘要循环集成,因此您不必担心$ scope。$ apply()的内容。我会做类似下面的事情:

MyClass.prototype.doSomething = function() { 
    var self = this; 
    $http.get(turl).success(function (data) { 
    self.property = data.stuff; 
    self.analyzeContent(); 
    }); 
} 

这里要记住的重要一点是,javascript使用函数作用域,而不是块作用域。只要一个对象存在于同一个函数中,它就被认为是“在范围内”。由于this的值取决于上下文而有所不同,因此您可以将其固定在变量(自我)中,并确信该值是您期望的值。

相关问题