Javascript 为什么这个承诺在我的控制器中不起作用

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

我有一个简单的服务。我称之为hello-service.js:

'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并查看它是否有效。这家伙写了一篇很好的文章: