Javascript 为什么这个承诺在我的控制器中不起作用
我有一个简单的服务。我称之为hello-service.js:Javascript 为什么这个承诺在我的控制器中不起作用,javascript,angularjs,asynchronous,angular-promise,Javascript,Angularjs,Asynchronous,Angular Promise,我有一个简单的服务。我称之为hello-service.js: 'use strict'; angular.module("MyApp.components.hello", []). factory("HelloService", function() { return window.hello; //assume hello has been loaded }); 然后我有一个名为菜单控制器的控制器,它显示一个登录链接: 'use strict'; angular.mo
'use strict';
angular.module("MyApp.components.hello", []).
factory("HelloService", function()
{
return window.hello; //assume hello has been loaded
});
然后我有一个名为菜单控制器的控制器,它显示一个登录链接:
'use strict';
angular.module("MyApp.components.menu", ["MyApp.components.hello"]).
controller("MenuController", ['$scope', 'HelloService', function($scope, HelloService)
{
HelloService.on('auth.login', function(auth)
{
HelloService('facebook').api('/me').then(function(r)
{
$scope.loginLink = "Hi, " + r.name;
});
});
}]);
这是我的模板:
<ul class="menu" ng-controller="MenuController">
<li><a href="#/">Home</a></li>
<li><a href="#/upload">Upload</a></li>
<li>{{loginLink}}</li>
</ul>
我知道代码会到达$scope.loginLink位,我可以使用console.log验证r.name是否正确。然而,我的模板中的{{loginLink}}从未得到更新,我也不知道为什么
我做错了什么?我们可以看看你的模板文件吗?用模板更新了问题。另外,我对代码做了一些修改,因为事实证明我的if条件可以由hello.on处理。您是否尝试过使用$scope.$apply;更新loginLink之后?有时在与服务交互时,这是必要的。确切地说,当您从非$resource或$http的外部源获取数据时,它不会立即应用到您的范围。将其包装在$scope中。$apply并查看它是否有效。这家伙写了一篇很好的文章: