State resolution in AngularJS

I need to get some content data for my controller:

state('admin.businesses.employees.all', {
    resolve: {
        executorsListTitle: 'All employees',
        executorsEmptyListMessage: 'Add the first employee'
    },
    url: '/all',
    controller: 'ExecutorsController',
    templateUrl: 'templates/admin/executors/index.html'
})

      

And the controller code:

module.controller(
    'ExecutorsController', 
     [
      '$scope', '$rootScope', '$state', 
      '$stateParams', '$modal', 'executorsListTitle', 
      'executorsEmptyListMessage', 'Executor', 
      function($scope, $rootScope, $state, $stateParams, $modal, executorsListTitle, executorsEmptyListMessage, Executor) {
          // Some code
      }
 )

      

But when I try to enter this state, I cannot do it - clicking on the button does nothing; if i remove permission from state description it works well. What am I doing wrong? Thank you!

+3


source to share


1 answer


The state machine solution expects a key and a factory. doc states :

  • key - {string}: The name of the dependencies to be injected into the controller.
  • factory - {string | function}

And when you provide a factory string:

If string, then this is an alias for the service.

If you want to return a string, you can do the following:

state('admin.businesses.employees.all', {
    resolve: {
        executorsListTitle: function() {
             return 'All employees';
        },
        executorsEmptyListMessage: function() {
             return 'Add the first employee';
        },
    },
    url: '/all',
    controller: 'ExecutorsController',
    templateUrl: 'templates/admin/executors/index.html'
})

      



If you are using static data (strings you allow) you can also use the custom data property:

state('admin.businesses.employees.all', {
    data: {
        executorsListTitle: 'All employees',
        executorsEmptyListMessage: 'Add the first employee'
    },
    url: '/all',
    controller: 'ExecutorsController',
    templateUrl: 'templates/admin/executors/index.html'
})

      

If you use this method, in the controller you can access the following data:

$state.current.data.executorsListTitle

      

You can use strings directly with this method. Here is the document for the custom data property.

+6


source







All Articles