Javascript 通过服务获取和设置心房

Javascript 通过服务获取和设置心房,javascript,angularjs,http,angular-services,Javascript,Angularjs,Http,Angular Services,我找不到解决方案,基本上每次我登录时,我都想将从节点端点获得的用户存储在服务中,然后在我的主控制器中,我应该获得用户的名称,但这永远不会发生,不知道为什么 代码如下: app.controller('MainCtrl', function ($scope, $state,$location,$http,user) { $scope.user = { nome: user.getProperty() }; $scope.showRegister = fu

我找不到解决方案,基本上每次我登录时,我都想将从节点端点获得的用户存储在服务中,然后在我的主控制器中,我应该获得用户的名称,但这永远不会发生,不知道为什么

代码如下:

app.controller('MainCtrl', function ($scope, $state,$location,$http,user) {

    $scope.user = {
        nome: user.getProperty()
    };

    $scope.showRegister = function () {
        $state.go('register');
    }

    $scope.showLogin = function () {
        $state.go('login');
    }

});

app.controller('loginController', function ($scope, $http, $state,user) {
    $scope.login = function () {

        var data = {};
        data.password = $scope.loja.password;
        data.email = $scope.loja.email;
        $http.post('http://localhost:8080/login/',data) 
        .success(function (data) {
            console.log(data);
            user.setProperty(data.nome);
            $state.go('home');
        })
        .error(function (statusText) {
            console.log("failed");
        });
    }
});
用户服务

app.service('user', function () {
    var property = {};
    return {
        getProperty: function () {
            return property.nome;
        },
        setProperty: function (value) {
            property.nome = value;
        }
    };

});

您的主要问题是
MainCtrl
。在初始执行
MainCtrl
时,服务中没有设置任何值,因此其值为空
MainCtrl
在设置服务中的值之前执行

$scope.user = {
        nome: user.getProperty()
};
此代码应在服务中设置值后执行,但在控制器初始化时执行

你可以从下面的小提琴上得到参考


http://jsfiddle.net/ADukg/9799/

您只需将此代码添加到MainCtrl:

    $scope.$watch(function () { return user.getProperty();}, updateProp, true);
    function updateProp(newValue, oldValue) {
      $scope.user = {
        nome: newValue
      };
    }

每次user.getProperty()的值更改时,都会执行updateProp。

是否使用angular service在控制器之间共享数据。如果是,请共享用户服务代码?编辑您正在使用的问题
数据。nome
我想您首先要检查它是否是
数据。name
数据。nome
?尝试更改应用程序服务(……);至应用程序工厂(……);这是数据。nomeok我明白,但是我如何在我的maincontroller之外设置它的值,我实际上需要在我的maincontroller视图上设置它:你在使用路由吗?是的,我在使用Ui路由器,基本上,我在母版页中有mainCtrl,而该页只有一个导航栏,我想把名字放在那里,如果用户范围是空的或不是空的,希望你能理解:)如果是导航栏,那么写
$scope.user={nome:user.getProperty()}并使用angular custom events的cocept在收到响应时删除该函数。我只是想将该对象存储在我实际拥有的服务中,以便我可以在navbar中检索它,并在稍后使用用户$scope执行一些验证工作。$watch影响angular performance。我希望您应该使用事件。这是正确的,如果性能是一个问题,您可能应该使用ARUN在其解决方案中建议的事件,每次范围中的值发生更改时,watch都会执行