How to execute a function after entering the Controller in AngularJS?

3

I have the following problem, I have more than one angular navigation state that uses the same controller, like this:

.state('app.estado-navegacao-1', {
  url: "/estado-navegacao-1",
  views: {
    'menuContent': {
      templateUrl: "templates/estado1.html",
      controller: 'EstadoNavegacaoCtrl',
      controllerAs: 'estado'
    }
  }
})

.state('app.estado-navegacao-2', {
  url: "/estado-navegacao-1",
  views: {
    'menuContent': {
      templateUrl: "templates/estado2.html",
      controller: 'EstadoNavegacaoCtrl',
      controllerAs: 'estado'
    }
  }
})

Well, I would like to "execute" this state, enter the controller, execute the normal methods and a function that varies according to the state of navigation chosen.

My controller looks something like this:

angular.module('controllers.estadonavegacao', [])
    .controller('EstadoNavegacao', EstadoNavegacao);

function EstadoNavegacao() {

    var vm = this;
    vm.init = init;
    vm.funcao = funcao;
    vm.funcao2 = funcao2;

    //Executa Normal nas duas chamadas
    init();

    function init() {

    };

    function funcao() {
     //Quero executar após o estado de navegação 1   
    };

    function funcao2() {
     //Quero executar após o estado de navegação 2  
    };

};

Does anyone have any idea how to do this?

    
asked by anonymous 30.05.2016 / 19:17

2 answers

2

You can use the $ location service to get the path you are running.

function EstadoNavegacao($location) {
  //...

  init();

  function init() {
    var path = $location.path();
    if (path === '/estado-navegacao-1')
      funcao();
    else
      funcao2();
  };
};

Or, you can manipulate the scope of controller by using the data attribute.

.state('app.estado-navegacao-1', {
  url: "/estado-navegacao-1",
  //...
  data: { estadoNavegaco: 1 }
})

.state('app.estado-navegacao-2', {
  url: "/estado-navegacao-1",
  //...
  data: { estadoNavegaco: 2 }
});

And accesses the property by controller scope:

function EstadoNavegacao() {
  var controller = this;

  init();

  function init() {
    if (controller.estadoNavegacao === 1)
      funcao();
    else
      funcao2();
  };
};
    
30.05.2016 / 19:23
3

In addition to the above options, you can use resolve :

.state('app.estado-navegacao-1', {
    url: "/estado-navegacao-1",
    //...
    resolve: { 
        // os comandos desejados aqui dentro, por exemplo
        message: function(messageService){
            return messageService.getMessage();
        }
    }
})

And have it available in the controller:

app.controller("myController", function (message) {
    $scope.message = message;
});

Depending on your needs, you have a solution.

    
30.05.2016 / 19:50