Obter acesso em o escopo de uma função para retornar o ID em uma view


(Philip Ramkeerat) #1

Estou criando a seguinte função, para retornar o IP do usuário, testando ela dentro do seu próprio escopo, dá certo, e ela me retorna o ip atual daquele usuário.
Porém quando preciso dos dados dessa função em uma view chamada edit.html não consigo ter o retorno do ID do usuário que eu criei na minha função.

$scope.editUser = function (id) {
console.log(id);
Users.findById({id: id}, function (result) {
$scope.userE = result;

})

};

console.log($scope.userE);

Qual a necessidade desse ID? -> Preciso desse id, para listar nos inputs os dados dos usuários, por exemplo:
No Input do nome do usuário, através desse id, eu consigo lançar no value o seu valor, no caso o nome.
Porém o id não tá chegando ao edit.html. O erro que me parece é que ela não está global, não consigo acessar esse id fora do escopo da própria função.

Preciso deixar essa função com acesso global. pra usar no meu edit.html, alguem pode ajudar? :grin:

edit.html




Nome
                                    <div class="col-sm-10">

                                        <input type="text" class="form-control" placeholder="Nome Completo" ng-model="user.name" ng-value="userE.name">
                                    </div>
                                </div>
                                <div class="form-group">
                                    <label for="inputEmail3" class="col-sm-2 control-label">Email</label>

                                    <div class="col-sm-10">
                                        <input type="email" class="form-control" placeholder="Email" ng-model="user.email">
                                    </div>
                                </div>
                                <div class="form-group">
                                    <label for="inputPassword3" class="col-sm-2 control-label">Senha</label>

                                    <div class="col-sm-10">
                                        <input type="password" class="form-control" placeholder="Senha" ng-model="user.password">
                                    </div>
                                </div>
                                <div class="form-group">
                                    <label for="inputPassword3" class="col-sm-2 control-label">Confirmar senha</label>

                                    <div class="col-sm-10">
                                        <input type="password" class="form-control" placeholder="Confirmar senha" ng-model="user.password_confirm">
                                    </div>
                                </div>

(Luan Maik) #2

ng-model="user.name" ng-value="userE.name"
????????????????????????

porque não utilizar apenas o user ??

$scope.editUser = function (id) {
Users.findById({id: id}, function (result) {
$scope.user = result;
})
};

a função editUser está explicita que vc realiza a busca do cadastro do user através do seu ID, o problema é apenas o fato de vc utilizar o ng-model e ng-value com variáveis diferente.

outro erro é vc utilizar o console.log($scope.userE); FORA da função editUser que é uma função ASSINCRONIA, ou seja, o javascript não vai esperar a função editUser retornar o cadastro para depois executar o console.log.
Se não compreender sobre síncrono e ■■■íncrono dá uma pesquisada na internet.


(Luan Maik) #3

Pelo que eu entendi do seu código eu aconselho a vc dar uma estudada melhor na programação dos controllers do Angular, pois parece estar fazendo gambiarra, sei que é normal enquanto está aprendendo, mas isso pode se transformar em dor de cabeça lá na frente.


(Philip Ramkeerat) #4

Valeu, coloquei fora pra ver se retornava o resultado abaixo, to aprendendo ainda utilizar ele, obrigado vou procurar ler sobre isso


(Philip Ramkeerat) #5

Consegui uma forma de resolver o problema, foi utilizando o $rootScope.

$scope.editUser = function (id) {
Users.findById({id: id}, function (result) {
$rootScope.user = result;
})
};

Espero que ajude alguém.


(Luan Maik) #6

Errado.

O $rootScope é utilizado para armazenar informações que possa ser acessado por toda a aplicação e não usa-la para guardar uma informação de um cadastro a ser editado. Um exemplo de uso do $rootScope é o nome do usuário logado.
No seu caso, acredito que tenha um controlador em Angular do cadastro de usuário e um formulário HTML para inserir as informações. Neste caso você precisa criar um controlador para o novoUsuario e outro controlador para editarUsuario.

novoUsuario.controller.js:

//Armazena os dados do usuario
$scope.usuario = {};

//Salva o cadastro do usuario
$scope.salvar = function(){
      UsuarioService.salvar($scope.usuario)
         .then(function(response){ 
              //resposta 
          })
}

editarUsuario.controller.js:

//Armazena os dados do usuario
$scope.usuario = {};

//Busca o cadastro do usuário a ser editado
UsuarioService.buscar({id: $parametroComId})
     .then(function(response){
               $scope.usuario = response.data;
      })

//Atualiza o cadastro do usuario
$scope.salvar = function(){
      UsuarioService.atualizar($scope.usuario)
         .then(function(response){ 
              //resposta 
          })
}

usuarioFormulario.html:

<input type="text" ng-model="usuario.nome">
<input type="text" ng-model="usuario.email">
<button ng-click="salvar()">Gravar</button>

Ambos os controladores usariam o mesmo formulário HTML.


(Philip Ramkeerat) #7

Valeu amigo, estou fazendo o sistema pelo Loopback, então tava um pouco enrolado em saber como ele funciona, por que tinha pego pela primeira vez naquela semana.

De umas lidas nas documentações, e fussei a net procurando exemplos e deu pra fazer o edit, obrigado pelo seu tempo e sua ajuda.:grin: