我构建了一个网页,其中有几个视图但只有一个控制器。由于控制器不应该重新加载页面切换,我将所有路由改为“/ main/{{itemNo}} /?routname”。但是,当切换页面时,控制器仍会重新加载(所以即使选择了英文,语言也总是会切换回德语)。有人可以告诉我我做错了什么吗?即使reloadOnSearch设置为false,控制器也会重新载入
下面是我的一些代码:
这是与新的路线app.js的一部分:
.config(function ($routeProvider) {
$routeProvider
.when('/main', {
templateUrl: 'views/main.html',
controller: 'MainCtrl',
controllerAs: 'main'
})
.when('/main/1/cart', {
templateUrl: 'views/cart.html',
controller: 'MainCtrl',
controllerAs: 'main',
reloadOnSearch: false
})
.when('/main/2/personaldata', {
templateUrl: 'views/personalData.html',
controller: 'MainCtrl',
controllerAs: 'main',
reloadOnSearch: false
})
这是我的控制器:
.controller('MainCtrl', function ($scope) {
this.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma'
];
// console.log('init');
$('#german').click(function() {
changeValue('german');
});
$('#english').click(function() {
changeValue('english');
});
$('#toshoppingcart').click(function() {
setTimeout(function() {
changeValue(selectedLang);
}, 10);
});
$('#tocheckout').click(function() {
setTimeout(function() {
changeValue(selectedLang);
}, 10);
});
var loadScript = function (src, callbackfn) {
var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.setAttribute("async", "true");
newScript.setAttribute("src", src);
if (newScript.readyState) {
newScript.onreadystatechange = function() {
if (/loaded|complete/.test(newScript.readyState)) callbackfn();
}
} else {
newScript.addEventListener("load", callbackfn, false);
}
document.documentElement.firstChild.appendChild(newScript);
};
function changeValue(language) {
console.log('change', language)
selectedLang = language;
if (language == 'english') {
loadScript("scripts/languages/english.js", function() {
updateValues()
});
} else {
loadScript("scripts/languages/german.js", function() {
updateValues()
});
}
}
var selectedLang = 'german';
changeValue(selectedLang);
侧面说明,任何原因,你正在使用jQuery ID选择,而不是'NG - 点击? –
这是一个普通的js项目,没有任何fw之前,现在我把它改为angular,因为我也有重载问题 – threxx
您可能需要将'selectedLang'存储在不同的位置,而不是控制器的构造函数作用域,可能是'$ rootScope',因为每次控制器被调用时(每个使用它的路由),你的'selectedLang'变量被定义为'german',而不是先前的定义值。我对吗? –