gpt4 book ai didi

javascript - AngularJS:如何在使用路由时更新变量值

转载 作者:行者123 更新时间:2023-12-03 06:16:19 27 4
gpt4 key购买 nike

我想使用 AngularJS 根据所选语言在页面标题内设置标志图标。该语言是在另一个 .htm 文件中选择的,并且全部由 AngularJS 路由汇集在一起​​。我的应用程序使用一个名为“appController”的 Controller 。 Controller 被插入到“index.html”中的body标签中。在“index.html”内部有一个使用 Angular 函数“setPicUrl()”的函数。 “appLang”的值由“language.htm”中的单选输入设置,该输入由 AngularJS 插入到使用路由中。

问题是,当我选择另一种语言时,标志图标的路径不会改变(变量“appLang”会改变)。当我启动应用程序时,图标会正确加载。

routing.js

var app = angular.module("angApp", ["ngRoute"]);
app.config(function ($routeProvider) {
$routeProvider
.when("/visualization", {
templateUrl: "htm/visualization.htm",
controller: "appController"
})
.when("/data", {
templateUrl: "htm/data.htm",
controller: "appController"
})
.when("/social", {
templateUrl: "htm/social.htm",
controller: "appController"
})
.when("/about", {
templateUrl: "htm/about.htm",
controller: "appController"
})
.when("/language", {
templateUrl: "htm/language.htm",
controller: "appController"
});
});

controller.js

app.controller("appController", function ($scope, $http, $location) {
$scope.appLang = "english";
$scope.setPicUrl = function () {
if ($scope.appLang === "german") {
return "icons/german.png";
} else if ($scope.appLang === "english") {
return "icons/english.png";
} else {
//TODO Error handling
return;
}
};

index.html

<body ng-app="angApp" ng-controller="appController">
...
<li ng-class="{ active: headerIsActive('/language')}"><a href="#language"><img id="langpic"
ng-src="{{setPicUrl()}}"
class="img-responsive"></a>
...
<div ng-view></div>
</body>

语言.htm

<div class="panel panel-default">
<div class="panel-heading">Spracheinstellungen</div>
<div class="panel-body">

<form>
Wählen Sie ihre Sprache aus:
<br/>
<input type="radio" ng-model="appLang" value="german">Deutsch
<br/>
<input type="radio" ng-model="appLang" value="english">Englisch
</form>
</div>
</div>

最佳答案

感谢您的帮助!我得到了一个解决方案:

问题是, Controller 是每个 View 中“appController”的副本,因此变量是具有相同名称的不同变量,并且不同的 View 无法访问相同的变量。

现在我使用服务与其他 Controller 共享变量,并为每个 View 使用自己的 Controller 。

服务:

app.factory("sharedProperties", function () {
return {
appLanguage: ""
};
});

langController:

app.controller("langController", function ($scope, sharedProperties) {
$scope.updateSharedProperties = function (){
sharedProperties.appLanguage = $scope.language;
console.log("--> updateSharedProperties(): " + $scope.language);
};
});

标题 Controller :

app.controller("headerController", function ($scope, $http, $location, sharedProperties) {
$scope.setPicUrl = function () {
if (sharedProperties.appLanguage === "german") {
return "icons/german.png";
} else if (sharedProperties.appLanguage === "english") {
return "icons/english.png";
} else {
//TODO Error handling
return;
}
};
});

用于更改语言的 HTML(使用 langController):

<form>
Wählen Sie ihre Sprache aus:
<br/>
<input type="radio" ng-model="language" value="german" ng-click="updateSharedProperties()">Deutsch
<br/>
<input type="radio" ng-model="language" value="english" ng-click="updateSharedProperties()">Englisch
</form>

用于在 header 中显示标志图标的 HTML(使用 headerController):

<li><img id="langpic" ng-src="{{setPicUrl()}}" class="img-responsive"></li>

关于javascript - AngularJS:如何在使用路由时更新变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39088868/

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