2017-02-04 2 views
0

Я не могу найти решение этого, в основном каждый раз, когда я делаю логин, я хочу сохранить пользователя, которого я получаю от конечной точки узла в сервисе, после этого в моей основной контроллер я должен получить имя пользователя, но это никогда не произойдет, не знаю, почемуугловой get и set atributes через службу

вот код:

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

}); 
+0

Вы используете угловое обслуживание для обмена данными между контроллерами. Если да, то, пожалуйста, поделитесь кодом для обслуживания пользователей? –

+0

отредактировал вопрос –

+0

Вы используете 'data.nome' Я думаю, вы сначала проверяете, что это' data.name' или 'data.nome'? –

ответ

0

Вы можете просто смотреть услугу изменения, добавив этот код в ваш MainCtrl:

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

updateProp запускается на выполнение каждый раз, когда значение user.getProperty() изменения.

+0

только что я искал: D, отлично –

+2

$ scope. $ Watch эффекты углового исполнения. Я предпочту вам использовать события. –

+0

это правильно, если производительность является проблемой, вы, вероятно, должны использовать такие события, как ARUN, предложенные в его решении, часы выполняются каждый раз, когда значение изменяется в области – darron614

0

Ваша основная проблема с вашим MainCtrl. При первоначальном выполнении MainCtrl в вашем сервисе нет значения, поэтому он становится пустым. MainCtrl выполняет перед установкой значения в службе.

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

Этот код должен быть выполнен после установки значения в службе, но он выполняется при инициализации контроллера.

Вы можете получить ссылку со скрипки ниже.

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

+0

ОК, я понимаю это, но как я могу установить значение для этого вне моего maincontroller, мне действительно нужно установить его на моем представлении mainController: S –

+0

вы используете маршрутизацию? –

+0

да я использую Ui-router, в основном у меня есть mainCtrl на главной странице, и на этой странице есть только navbar, я хочу поместить там имя и изменить какой-нибудь stuf, если эта область пользователя пуста или нет, надеюсь, что вы поняли :) –