angular get并通过服务设置属性

时间:2017-02-04 14:33:39

标签: javascript angularjs http angular-services

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

这是代码:

var url = "https://www.quandl.com/api/v3/datasets/WIKI/FB.json";
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onload = function() {
    var data = JSON.parse(this.responseText).dataset.data;
    // {}.dataset.data is the data matrix in Quandl
    // then process your own way
}
xhr.send();

用户服务

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");
        });
    }
});

2 个答案:

答案 0 :(得分:0)

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

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

此代码应在设置服务中的值后执行,但在控制器初始化时执行。

你可以从下面的小提琴中获得参考。

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

答案 1 :(得分:0)

您可以通过将此代码添加到MainCtrl来查看服务以进行更改:

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

每次user.getProperty()的值发生变化时,都会执行updateProp。