javascript - 我可以改进这个 AngularJS/AJAX javascript 片段吗?

标签 javascript ajax design-patterns angularjs coding-style

<分区>

我有以下通用代码。

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) 闭包“this”以便成功函数可以访问我的对象及其状态

(2) 在内部,我返回一个对数据执行某些操作的函数,但是...

(3) 我希望 AngularJS 捕获成功所做的一切,所以这个解析数据的函数将 进一步 将其操作包装在 $apply 调用中。

这行得通,但我不禁想知道是否有更好的方法来实现这一点。由于嵌套函数的数量,我每次看到它时都必须考虑自己在做什么。

这样可以吗,或者有更好的推荐款式吗?

最佳答案

我假设此代码块位于 Angular 服务、 Controller 或指令中。如果不是,那么手头有一个更广泛的问题。 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 使用函数作用域,而不是 block 作用域。只要一个对象存在于同一个函数中,它就被认为是“在范围内”。由于 this 的值根据上下文而变化,您可以将它放在一个变量 (self) 中并确信该值是您期望的值。

关于javascript - 我可以改进这个 AngularJS/AJAX javascript 片段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848800/

相关文章:

javascript - 单击链接文本时,jQuery 函数(事件)event.target.id 为空

c# - Ajax 自动完成扩展程序在母版页中不起作用

javascript - 为什么通过 Ajax jQuery 发送数据失败

java - 需要初始化对象时使用的设计模式?

Swing 中的 Java 创 build 计模式

javascript - 我怎样才能使这个 jBox 画廊响应?

javascript - 对 javascript 链接使用 <a> 标签或任何标签?

javascript - angularjs如何通过多个选择删除重复项

javascript - 浏览器中的混合内容检测是否适用于通过 AJAX 传递的数据?

design-patterns - Log4Net Wrapper 类会是什么样子?