当前位置: 首页 > 面试题库 >

AngularJS-为什么需要应用$来正确解决$ q承诺?

那安宁
2023-03-14
问题内容

我正在尝试在我的角度应用程序中编写一个小型服务,这将使我能够选择在全局Javascript对象中指定的配置参数。除非文档准备好,否则我不想尝试访问全局配置对象(因为我不能保证脚本元素在HTML中的插入顺序)。

但是,我不明白为什么我需要调用才能$apply使分辨率实际传播到then回调。

myModule.service('GlobalConfigService', ['$q', '$rootScope', function($q, $rootScope) {
    var def = $q.defer();
    $(document).ready(function() {
        def.resolve(MyConfig.val);
        $rootScope.$apply();
    });

    def.promise.then(function () {
        console.log('I am called only when $apply() is called. Why?');
    });

    return def.promise;
}]);

问题答案:

在AngularJS中,resolve()的结果在$digest周期内异步传播,而不是立即传播。这意味着仅在摘要循环发生时才调用(随后)向then()注册的回调。

在您的代码中,没有什么会导致Angular进入摘要循环,因此永远不会调用then()回调。调用$apply()是导致摘要循环运行的一种方法。另一种方法:使用ng-click添加一个不执行任何操作的按钮,然后单击该按钮,这将导致摘要循环,您应该看到结果:

<button ng-click="">Force digest by clicking me</button>


 类似资料:
  • 问题内容: 从jQuery转换几年后,我正在学习AngularJS。还有一些更直观。有些不是很多:)。 我正在努力使我对promise的使用有所了解,尤其是在与$ http一起使用$ q的情况下,我找不到关于这两个组合的太多信息。 为什么我要使用promise代替成功/错误回调?它们都在现实中利用了回调,那么为什么将诺言视为更好呢?例如,我可以设置如下功能: 哪个好(?),因为它使我可以完全控制正

  • 假设我们有以下代码: 一个相当简单的片段——我们获取一个地图,并返回另一个代表相同地图但根据其值排序的地图。 让我们稍微改变一下功能——与其基于参数返回一些内容,不如介绍一个对象: 请注意,我们唯一改变的是去掉参数,取而代之的是使用字段。有人可能想知道为什么要引入泛型和——毕竟它们总是分别是和。但是这难道不意味着Java可以很容易地推断出这些参数吗?为什么它会失败,错误为: 我看到了一些关于类似错

  • 所以,我正在为一个班级做这个作业。这是一个Java类,我应该做一个游戏,它掷两个骰子,把它们相加,然后把它们加到你的回合分数上。然后它会问你是否想继续玩下去。当你的轮次得分达到20分,或者当你决定通过时,它会进入电脑。它应该打印每个回合的分数,然后当有人得到100分时,它就会宣布胜利者。然而,不管怎样,无论我跑了多少圈,每一圈结束时的分数都是0。当一名玩家掷1时,他们的回合分数被取消,并转移到另一

  • 我试着去理解Spring是怎么跟所有的事情联系在一起的。然而,我不明白为什么在单元测试spring代码时使用mockito?spring不能处理与mockito相同的DI吗?莫基托贡献了什么是纯泉所不可能做到的? 澄清:我的想法是,我可以使用一个不同的应用程序上下文来进行测试,在这里创建我需要的存根bean作为虚拟对象。

  • 问题内容: 我的服务是: 我通过以下方式在我的文件中调用它: 但是,它抱怨这不是一个功能。我不退还已解决的承诺吗? 问题答案: 从您的服务方式: 在您的控制器中:

  • 问题内容: 该单页应用(SPA)已经到了我们。随之而来的还有很多新功能,例如路由,客户端页面生命周期,MVC模式,MVVM模式,MV *模式等等。还有一些Javascript模式,例如AMD模式,Singleton,Facade,.. 还开发了许多SPA框架和库。我们可以在互联网上找到它的一些内容。它们是AngularJs,Reactjs,BackboneJs,DurandalJs 等等,以及许多