javascript - Angularjs 注入(inject)附加变量

标签 javascript angularjs

所以在 Angular 中可以做这样的事情:

function userTemplateProvider($sessionStorage, $templateRequest) {
 var user = $sessionStorage.user;
}

当您调用该函数时,您只需键入:userTemplateProvider;,Angular 将自动注入(inject)服务。

现在我处于需要将变量传递给该函数的情况。

如果我这样做:

userTemplateProvider($sessionStorage, $templateRequest, myvar);

当然,将 myvar 添加到函数中:

    function userTemplateProvider($sessionStorage, $templateRequest, myvar){
 var user = $sessionStorage.user;
}

然后这两个服务将是空的。

所以我的问题是如何添加变量但仍然注入(inject)服务

我的完整代码:

仪表板模块

angular.module('Dashboard',[])

.config(['$stateProvider', '$urlRouterProvider', 'JQ_CONFIG', 'USER_ROLES', 'hammerDefaultOptsProvider',
    function ($stateProvider, $urlRouterProvider, JQ_CONFIG, USER_ROLES, hammerDefaultOptsProvider) {
            $stateProvider
            .state('dashboard', {
                abstract: true,
                url: '/dashboard',
                templateProvider: userTemplateProvider,
                resolve: {
                    deps: ['uiLoad',
                        function (uiLoad) {
                            return uiLoad.load([
                                'js/controllers/headerController.js'
                            ]);
                        }]
                }
            })
            .state('dashboard.index', {
                url: '/index',
                templateProvider:getTemplate,
                data: {
                    authorizedRoles: [USER_ROLES.lb, USER_ROLES.superadmin, USER_ROLES.subadmin]
                },
                resolve: {
                    deps: ['uiLoad',
                        function (uiLoad) {
                            return uiLoad.load([
                                'js/controllers/chart.js',
                                'js/controllers/dashboard/DashboardController.js',
                                'js/controllers/dashboard/ClientDashboardController.js'
                            ]);
                        }]
                }
            })

    }]);

模板加载器

    angular.module('TemplateLoader', []);

function userTemplateProvider($sessionStorage, $templateRequest) {
    var templateLocation = $sessionStorage.activeUser.user.user_type.super_type_id == 1 ? 'tpl/app.html' : 'tpl/client/client.html';
    return $templateRequest(templateLocation);
}
function getTemplate($state, $sessionStorage) {
    var templateLocation = null;
    switch ($sessionStorage.activeUser.user.user_tpe.super_type_id) {
        case 1:
            break;

        case 2:
            break;

        default:
            break;
    }
    return $templateRequest(templateLocation);

}

最佳答案

创建一个专门用于 myvar 的函数是可行的,尽管您可能可以使用 Angular 的约定。

function userTemplateProvider(myvar) {
  return function($sessionStorage, $templateRequest) {
    var user = $sessionStorage.user;
    // can also access myvar here
  };
}

然后我们将其作为:

userTemplateProvider(myvar);

关于javascript - Angularjs 注入(inject)附加变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36421530/

相关文章:

javascript - 从 JavaScript 检测 Angular

javascript - 如何处理 DOM 和 Controller 之间的交互?

javascript - 在 Javascript 日期中使用 UTC 时区

javascript - xpath 的行为就像单击按钮一样,但没有执行任何实际操作

angularjs - 为什么我可以从浏览器发出 REST API 请求,但不能从 Angular 的资源发出请求?

html - $范围未定义

javascript - Angular UI 路由器子状态不适用于 IE

javascript - 如何保持导航标签不变

javascript - 临时文档中的 getElementById 不起作用

javascript - 如何为多个元素分配拖动功能/监听器?