我構建了一個網頁,其中有幾個視圖但只有一個控制器。由於控制器不應該重新加載頁面切換,我將所有路由改爲「/ 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',而不是先前的定義值。我對嗎? –