سؤال

أحاول بفارغ الصبر إنشاء $StateProvider الديناميكي:

معيار ثابت $StateProvider:

    $stateProvider
      .state('main',
      {
        url: '/',
        templateUrl: '/views/main.html',
        controller: 'MainCtrl'
      })
      .state('login',
      {
        templateUrl: '/views/login-form.html',
        controller: 'LoginCtrl'
      })
      .state('logout',
      {
        controller: 'LogoutCtrl'
      })
      .state('sales', {
        templateUrl: '/views/sales-data.html',
        controller: 'SalesDataCtrl',
        resolve: {
          user: 'User',
          authenticationRequired: function(user) {
            user.isAuthenticated();
          }
        }
      });

ديناميكي $StateProvider:

var verify = function(user) { user.isAuthenticated(); };

var states= [
{ name: 'main', url: '/', templateUrl: '/views/main.html', controller: 'MainCtrl' },
{ name: 'login', url: '', templateUrl: '/views/login-form.html', controller: 'LoginCtrl' },
{ name: 'logout', url: '', templateUrl: '', controller: 'LogoutCtrl' },
    {
        name: 'sales',
        url: '',
        templateUrl: '/views/sales-data.html',
        controller: 'SalesDataCtrl',
        //resolve:
        //[
        //    { user: 'User', authenticationRequired: 'verify();' }
        //]
    }
];
       // w/o the array brackets in resolve the navigation does not work.
       // with the array brackets, once sales is clicked I get:
       // Error: [ng:areq] Argument 'fn' is not a function, got Object

تعمل الطريقتان أدناه طالما أنني لا أستخدم الحل:

  This works:
   angular.forEach(states, function(state) {
        $stateProvider.state(state);
    });

   This works:
   angular.forEach(states, function(state) {
        $stateProvider.state(state.name, state);
    });

سؤال: كيف يمكنني أن أجعل $StateProvider الديناميكي يعمل بكل تصميم؟

هل كانت مفيدة؟

المحلول

الحل:

giveacodicetagpre.

نصائح أخرى

أعتقد أنك تتصل $stateProvider.state(...) بشكل غير صحيح، فإنه يأخذ معرف الحالة ثم كائن التكوين.

على افتراض الخاص بك name الخصائص صالحة وفريدة من نوعها، ويجب أن تكون قادرًا على القيام بذلك (أو تعديلها حسب الحاجة):

angular.forEach(states, function(state) {
    $stateProvider.state(state.name, state);
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top