AngularJS推迟范围内的特定行为

weixin_38050602 2019-09-12 04:08:23

假设我们有一个这样的一些HTML: <button id="my-login-button" ng-hide="loggedIn" ng-click="login()">Log me in!</button> 另外,我们有一个JavaScript: // controller.js $scope.login = function() { API.login() .then(function() { console.log('login promise resolved'); }); }; // service.js app.factory('API', ['$q', '$timeout', function ($q, $timeout) { return { login: function() { var login = $q.defer(); // async login VK.Auth.login( function() { // login.resolve(); // doesn't work without $timeout() $timeout(login.resolve); // works as it should }, VK.access.FRIENDS | VK.access.AUDIO ); return login.promise; } }; }]); 这段代码工作正常,但神秘的部分靠近$timeout()功能。为什么我应该用我的决心来解决呢?为什么代码不按预期工作没有它? 我不对范围变量做些什么,我只是安慰。没有$timeout它将被称为下一个摘要... 至于我没有任何意义,如果我需要更改范围道具,我会包装一切在$apply。 任何人都可以解释为什么通常的延期行为变得神秘吗? P.S.在阅读this question answers后,我用$timeout解决了我的问题。






...全文
41 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38065454 2019-09-12
  • 打赏
  • 举报
回复

在AngularJS中,承诺结果是在$ digest循环内异步传播的。因此,then()的结果不会传播到下一个摘要循环,如果没有$timeout或$http或$apply触发一个循环,那么这个循环将永远不会发生。 另请参见Promise callback not called in Angular JS

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧