私はいくつかのビューがありますが、コントローラーは1つしかないWebページを作成します。コントローラがページスイッチにリロードしないように、私はすべてのルートを "/ 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);
サイドノート、あなたはNG 'jQueryのIDセレクタを使用して代わりにしているいずれかの理由-click'? –
これは通常のjsプロジェクトで、fwがなくても直前にリロードの問題があったので角度を変えました – threxx
'selectedLang'はコントローラのコンストラクタスコープではなく別の場所に格納する必要があります。おそらく' $なぜなら、コントローラが呼び出されるたびに(あなたが使用するすべてのルート)、 'selectedLang'変数は、前に定義された値の代わりに' german'として定義されるからです。私は正しい? –