我已经在这里进行了一些研究,但总是找不到合适的方法来实现它。
我们有MVC / WebAPI2 / AngularJS Web应用程序。
我正在尝试实现这一目标:能够将我的应用程序放在IIS应用程序文件夹结构中的任何位置而无需更改任何代码。这意味着,在我的代码中删除任何IIS应用程序名称。
这是定义的ng-route路径的简单片段:
.when(“/”,{templateUrl:“Home / Main”,控制器:“MainController”, controllerAs:“vm”})
现在,IIS应用程序名为 ReportsWeb (但可以是任何名称)
如果我在默认网站 root下设置 ReportsWeb 应用程序:
然后一切正常,并且templateUrl页面加载正常。
但如果应用程序放在另一个IIS应用程序(我们这里的那个名为 RealSuiteApps ,它本身位于默认网站下)
然后,模板未加载,因为templateUrl的构造URL不再有效:
http://localhost/RealSuiteApps/Home/Main
如果我将templateUrl更改为“/ Home / Main”,则构造的URL无效
http://localhost/Home/Main
如果我将templateUrl更改为“./Home/Main”,则构造的URL再次无效
http://localhost/RealSuiteApps/Home/Main
是否可以相对于IIS层次结构中的最新App名称定义templateUrl 而无需对所有这些名称进行硬编码,以便它可以在任何IIS应用程序树中使用
谢谢!
答案 0 :(得分:0)
我使用grunt-html2js
工具在构建时将所有html模板转换为Javascript,后者使用Angular的模板缓存。
我已经定义了我的grunt任务来覆盖默认模块命名为templates/
,以便我可以轻松地引用任何模板:
html2js: {
options: {
rename: function (moduleName) {
return moduleName.replace(/^.*[\/\\]/, 'templates/');
}
},
all: {
src: ['./src/**/*.html', '!./src/index.html'],
dest: 'tmp/templates.js'
}
},
这将创建一个templates.js
文件,我可以将其作为脚本标记包含在内。然后我可以访问任何模板:
templatUrl: 'templates/my-template-filename.html'
无论源代码中的路径在哪里。