当前位置: 首页 > 知识库问答 >
问题:

对$scope的需求感到困惑$申请

周鸿运
2023-03-14

我有一个角度控制器:

.controller('DashCtrl', function($scope, Auth) {
    $scope.login = function() {
        Auth.login().then(function(result) {
            $scope.userInfo = result;
        });
    };
});

正在使用我创建的服务:

.service('Auth', function($window) {
    var authContext = $window.Microsoft.ADAL.AuthenticationContext(...);

    this.login = function() {
        return authContext.acquireTokenAsync(...)
            .then(function(authResult) {
                return authResult.userInfo;
            });

    };
});

身份验证服务使用的是一个Cordova插件,它不属于角度世界。我想我不清楚什么时候需要使用$范围$应用来更新$范围,如果不更新的话。我的错误假设是,因为我已将逻辑包装到角度服务中,所以在本例中我不需要它,但除非我包装$范围,否则不会更新任何内容。userInfo=$超时或$范围中的语句$应用

为什么在这种情况下有必要?


共有2个答案

黎鹤轩
2023-03-14
匿名用户

Angular不知道$范围。userInfo已修改,因此需要通过使用scope执行摘要周期$apply(应用)将更改应用到$scope(范围)。

是的,$超时也会触发摘要周期。它只是执行scope的角度版本的setTimeout$运行包装好的代码后应用

在您的情况下,<代码>$范围$apply()就足够了。

注意:$timeout也有异常处理并返回一个Promise。

白宏放
2023-03-14
匿名用户

从角的维基:

AngularJS为常见的本机JS异步行为提供包装器:

...

jQuery。ajax()=

这只是一个传统的异步函数,末尾调用了一个$Scale.$Application(),告诉AngularJS刚刚发生了异步事件。

所以我想,由于您的身份验证服务没有使用angular的http,$范围$angular在执行AsyncAuth函数后不会调用apply()。

尽可能使用AngularJS服务,而不是本机服务。如果您正在创建AngularJS服务(例如用于套接字),那么它应该具有$范围$apply()在任何激发回调的地方。

编辑:

在您的情况下,一旦模型通过包装更新,您应该触发摘要周期(就像您所做的那样):

Auth.login().then(function(result) {
   $scope.$apply(function(){
      $scope.userInfo = result;
   });
});

Auth.login().then(function(result) {
    $scope.userInfo = result;
    $scope.$apply();
});

 类似资料:
  • 我正在尝试提出一种解决方案,它涉及在连接操作之后应用一些逻辑,从多个中的中选择一个事件。这类似于reduce函数,但它只返回1个元素,而不是递增地返回。因此最终结果将是单个(,对,而不是一个 每个键保证只到达一次。 假设像上面这样的连接操作,它用4个生成了1个,成功地连接并收集在。现在,我想做的是,立即访问这些值,并执行一些逻辑以将正确匹配到一个。例如,对于上面的数据集,我需要(,和)。 将为每个

  • 所以我一直在读Kafka的语义学,我对它的工作原理有点困惑。 我理解生产者如何避免发送重复的消息(以防代理的ack失败),但我不明白的是,在消费者处理消息但在提交偏移量之前崩溃的情况下,一次是如何工作的。Kafka不会在这种情况下重试吗?

  • 问题内容: 我已经在eclipse中创建了一个项目,并添加了Maven依赖项。在Eclipse中,它表示我正在使用JRE 1.5。一切在Eclipse中都可以正常运行,例如,我可以运行测试。 当我尝试从终端运行时,出现以下错误。 …在-source 1.3中不支持泛型(使用-source 5或更高版本来启用泛型)… 看来,Maven认为我正在使用JRE 1.3,并且无法识别泛型或for-each循

  • 问题内容: 在碰到此链接http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using- executors-and-threadpoolexecutor 之后,这是我第一次为新项目使用Java线程池。 .html ,我对此更加困惑,这是页面中的代码, 在代码中,创建了一个固定大小的池并创建了10个工作线程,对吗? 线程池应该

  • 问题内容: 我可以理解以下定义: 每个对象都有一个标识,一个类型和一个值。一旦创建了对象,其身份就永远不会改变。您可能会认为它是对象在内存中的地址。所述操作者比较两个对象的身份; 该函数返回一个表示其身份的整数。 我认为上面的定义在创建“某物”时起作用,例如: 但是我不理解: 我还没有创建任何东西。那么整数“ 1”如何具有ID?这是否意味着只要我在Python Shell中“提及” 1,便立即将其

  • 问题内容: 我在理解jsonp请求如何工作的细节方面遇到麻烦。我已经阅读了包括jsonp上的wiki在内的多个资源,并且对于在进行jsonp调用时回调实际上如何保留从服务器返回的函数仍然很困惑。例如,在Wiki中,请求的源设置为: jsonp = parseResponse究竟实际在做什么/意味着什么?然后他们继续说有效负载是: 这是如何运作的?我对整个回调功能感到困惑。函数名称parseResp