如何在ui-router(Angular)状态函数内获得常量

时间:2015-12-23 02:03:38

标签: angularjs angular-ui-router angularjs-service

我想引用在此状态函数之外定义的“常量”,但如果我尝试将其作为提供程序传递,则会出错,因为常量不是提供程序。也就是说,我想做类似的事情:

var exports = module.exports = function ($stateProvider,configData) { ...

但那失败了。如何将我的javascript变量baseDirectory传入。

更大的问题是webroot并不总是在同一个url。有时它是/ ng,有时它只是/我希望能够将其设置为某个地方,我可以将其加载到配置文件中(而不是硬编码到状态函数中。

var exports = module.exports = function ($stateProvider) {
  $stateProvider.state('home', {
    url: baseDirectory + '/home',
    templateUrl: '/templates/home/home.html',
    controller: 'HomeController',
  });
};
exports.$inject = ['$stateProvider'];

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我做的是在应用程序中构建一个常量,并在基本URL更改时用gulp任务中的新值替换它们。

它有很多应用程序,所以我的想法很愚蠢,只需通过gulp任务配置输入的新值来查找并替换应用程序中内容的值。

这不聪明,但有效。

在示例中,我在/ clinic,/ panel,/ company中有三个应用程序,并且对于每个应用程序,它都有一个build.js。

build.js将构建应用程序,并替换常量值。

我有很多应用,所以我这样做:

var gulp = require('gulp');
var concat = require('gulp-concat');

var taskBuildClinic = require("./clinic/build");
var taskBuildPanel = require("./panel/build");
var taskBuildCompany = require("./company/build");

var migrate = require("./laravel/migrate");

var env = {
    'dev': {
        EndpointBaseUrl: "'/admin/public/';",
        TemplateBaseUrl: "'/admin/public';"
    }
};

// ./node_modules/.bin/gulp

gulp.task('clinic', function (cb) {

    return taskBuildClinic(gulp, env);
});

gulp.task('company', function (cb) {

    return taskBuildCompany(gulp, env);
});

gulp.task('panel', function (cb) {
    return taskBuildPanel(gulp, env);
});

在位于不同应用中的每个build.js中,它都有:

var concat = require('gulp-concat');
var replace = require('gulp-replace');
...

if (env['production']) {

    // replace something not for production

    endpoint = "var EndpointBaseUrl = " + env['production']['EndpointBaseUrl'];
    templateBaseUrl = "var TemplateBaseUrl = " + env['production']['TemplateBaseUrl'];
    console.log(endpoint);
    console.log(templateBaseUrl);

} else {

    endpoint = "var EndpointBaseUrl = " + env['dev']['EndpointBaseUrl'];
    templateBaseUrl = "var TemplateBaseUrl = " + env['dev']['TemplateBaseUrl'];
    console.log(endpoint);
}

return gulp.src(files)
    .pipe(concat(prefix + '.js'))
    .pipe(replace(/var EndpointBaseUrl.*?;/g, endpoint))
    .pipe(replace(/var TemplateBaseUrl.*?;/g, templateBaseUrl))
    .pipe(gulp.dest('./build'));

在应用程序中,我有:

var TemplateBaseUrl = "";
var EndpointBaseUrl = "";

他们的内容将被gulp任务中的值替换。