gpt4 book ai didi

angularjs - 尝试基于常量在 Controller 中动态设置templateUrl

转载 作者:行者123 更新时间:2023-12-04 13:49:42 25 4
gpt4 key购买 nike

我想基于我在angularjs bootstrap 中定义的预设常数来更改与 Controller 关联的templateUrl。我不知道该如何更改。我已经尝试了UrlRouteProvider,但无法弄清楚如何从文件系统中提取html。我被卡在templateUrl上。

在下面的代码中,输出首先显示“确实将svcc传递到了第一个函数的console.out中,但是在templateUrl定义函数中,CONFIG未定义。

我愿意采取其他方式来做到这一点。

    var app = angular.module('svccApp', [
'ui.router'
]);

var myConstant = {};
myConstant.codeCampType = "svcc";
app.constant("CONFIG", myConstant);

app.config(['$stateProvider', '$urlRouterProvider','CONFIG',
function ($stateProvider, $urlRouterProvider,CONFIG) {
console.log(CONFIG.codeCampType);
$stateProvider
.state('home', {
url: '/home',
//templateUrl: 'index5templateA.html', (THIS WORKS)
templateUrl: function(CONFIG) {
console.log('in templateUrl ' + CONFIG.codeCampType);
if (CONFIG.codeCampType === "svcc") {
return 'index5templateA.html';
} else {
return 'index5templateB.html';
}
},
controller: function ($state) {
}
});
}]);

最佳答案

我创建了一个plunker here
您快到了,只是语法为 'templateProvider' :

.state('home', {
url: '/home',
//templateUrl: 'index5templateA.html', (THIS WORKS)
// templateUrl: function(CONFIG) {
templateProvider: function(CONFIG) {
...
来自doc的片段:
Templates

TemplateUrl
... templateUrl can also be a function that returns a url. It takes one preset parameter, stateParams, which is NOT injected.

TemplateProvider
Or you can use a template provider function which can be injected, has access to locals, and must return template HTML, like this:


因此,在我们的例子中,将是实现:
 $stateProvider
.state('home', {
url: '/home',
//templateUrl: 'index5templateA.html', (THIS WORKS)
templateProvider: function(CONFIG, $http, $templateCache) {
console.log('in templateUrl ' + CONFIG.codeCampType);

var templateName = 'index5templateB.html';

if (CONFIG.codeCampType === "svcc") {
templateName = 'index5templateA.html';
}
var tpl = $templateCache.get(templateName);

if(tpl){
return tpl;
}

return $http
.get(templateName)
.then(function(response){
tpl = response.data
$templateCache.put(templateName, tpl);
return tpl;
});
},
controller: function ($state) {
}
});
检查 examle here
还要检查:
  • Angular UI Router: decide child state template on the basis of parent resolved object
  • Angular and UI-Router, how to set a dynamic templateUrl
  • 关于angularjs - 尝试基于常量在 Controller 中动态设置templateUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27774287/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com