AngularJS-在app.config中对动态数据进行$StateProvider查询

AngularJS-在app.config中对动态数据进行$StateProvider查询,angularjs,breeze,Angularjs,Breeze,这是可行的,但Json不是我想要检索数据的方式: var states = [ { name: 'main', url: '/', templateUrl: '/views/main.html', controller: 'MainCtrl' }, { name: 'login', url: '', templateUrl: '/views/login-form.html', controller: 'LoginCtrl' }, { name: 'logout', url: '', templa

这是可行的,但Json不是我想要检索数据的方式:

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:
            ['user', function(user) { user.isAuthenticated(); }]
        }
    }
];

    angular.forEach(states, function (state) {
        $stateProvider.state(state.name, state);
    });
 app.config(['$locationProvider', '$resourceProvider', '$stateProvider', function ($locationProvider, $resourceProvider, $stateProvider) {
    $locationProvider.html5Mode(true);

  not working --->  var states = $resource('http://localhost:9669/api/breeze/states').query();

    angular.forEach(states, function(state) {
        $stateProvider.state(state.name, state);
    });
}]);
这在检索数据时不起作用:

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:
            ['user', function(user) { user.isAuthenticated(); }]
        }
    }
];

    angular.forEach(states, function (state) {
        $stateProvider.state(state.name, state);
    });
 app.config(['$locationProvider', '$resourceProvider', '$stateProvider', function ($locationProvider, $resourceProvider, $stateProvider) {
    $locationProvider.html5Mode(true);

  not working --->  var states = $resource('http://localhost:9669/api/breeze/states').query();

    angular.forEach(states, function(state) {
        $stateProvider.state(state.name, state);
    });
}]);
我的问题有两个方面:

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:
            ['user', function(user) { user.isAuthenticated(); }]
        }
    }
];

    angular.forEach(states, function (state) {
        $stateProvider.state(state.name, state);
    });
 app.config(['$locationProvider', '$resourceProvider', '$stateProvider', function ($locationProvider, $resourceProvider, $stateProvider) {
    $locationProvider.html5Mode(true);

  not working --->  var states = $resource('http://localhost:9669/api/breeze/states').query();

    angular.forEach(states, function(state) {
        $stateProvider.state(state.name, state);
    });
}]);
  • 如何在app.config中检索远程数据以填充$StateProvider
  • 我知道即使实现了,我也会对

    ['user',函数(user){user.isAuthenticated();}]

    因为它将作为字符串返回,而angular不会将其识别为函数。 我怎样才能克服这个问题

  • [旁注:api调用不起作用,问题不在于api控制器。]


    谢谢。

    [解决方案]

    关于这件事的文档是零碎的,但在把各种帖子拼凑在一起之后,我找到了答案

    首先,您必须了解,$stateProvider中不能填充数据,因为它是app.config的一部分,因为app.config仅初始化提供程序,实际的http服务必须在app.run中执行

    步骤1:在app.module之前声明2个全局变量,即$stateProviderRef和$urlRouterProviderRef引用,并在app.config中将实际的$stateProvider和$urlRouterProvider引用传递给它们:

    步骤2:创建自定义工厂提供程序:

    步骤3:在app.run中调用自定义提供程序:

    app.run(['$q','$rootScope','$state','$urlRouter','menuItems',',
    函数($q、$rootScope、$state、$urlRouter、menuItems){
    breeze.core.extendedq($rootScope,$q);
    menuItems.all().success(函数(数据){
    角度.forEach(数据、函数(值、键){
    var stateName='state_u2;'+value.OrderNum//