gpt4 book ai didi

javascript - 在 AngularJS 应用程序中登录后动态更改菜单

转载 作者:行者123 更新时间:2023-11-30 16:49:00 24 4
gpt4 key购买 nike

index.html

<body ng-app="dnaClientApp" ng-controller="MainCtrl">
<ul class="nav navbar-nav navbar-collapse">
<li ng-repeat="item in menu" ng-class="{active: item.route === menuActive }"><a href="#{{item.route}}">{{item.label}}</a>
</li>
</ul>

MainCtrl main.js

.controller('MainCtrl', function ($scope, $route, $rootScope, $location, $cookies, translationSvc, $http, $cookieStore, UserService) {

if (typeof $scope.selectedLanguage === 'undefined') {

$scope.selectedLanguage = 'fi';//Default language

}
translationSvc.getTranslation($scope, $scope.selectedLanguage);


$scope.menu = translationSvc.getMenu($scope.selectedLanguage);//Creating menus dynamically
console.log('$scope.menu-->' + $scope.menu + ' length: ' + $scope.menu.length);

$scope.menuActive = '/';

$rootScope.$on('$routeChangeSuccess', function (e, curr, prev) {
$scope.menuActive = $location.path();
});

翻译服务

var getMenu = function($scope, language) {
if (language === 'fi' && typeof $rootScope.userRole !== 'undefined' && typeof $rootScope.userRole.currentUserRole !== 'undefined' && $rootScope.userRole.currentUserRole.userRole === 3 ) {

$scope.menu = [
{label: 'Home', route: '#/'},
{label: 'DNA', route: '#/dna'},
{label: 'Dna-list', route: '#/dna-list'},
{label: 'Admin', route: '#/admin'}

]

}else...

登录后的路由在这里,菜单在index.html

.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})

问题

如果我检查 Controller 中菜单数组的长度,一切正常,但标题中的菜单都是相同的默认菜单(3 个菜单,而不是 4 个)。我做错了什么或者为什么我不能动态更新菜单?想法是为不同的 Angular 色获得不同的菜单,例如管理员也可以看到管理菜单等。还有其他可行的想法来完成这项工作吗?

最佳答案

我不喜欢将 $scope 传递给服务的想法。它使服务阅读起来非常困惑,因为您不知道它正在更改哪些数据。相反,为什么不直接在 translationSvc.getMenu() 中构建菜单并将其返回给 MainCtrl。我不明白为什么这样的事情不应该工作,除非你没有发布的代码正在做其他事情。

Controller :

.controller('MainCtrl', function ($scope, $route, $rootScope, $location, $cookies, translationSvc, $http, $cookieStore, UserService) {
...

// Creating menus dynamically
$scope.menu = translationSvc.getMenu($scope.selectedLanguage);

...
}

翻译服务:

var getMenu = function(language) {
var newMenu = []

if (language === 'fi' && typeof $rootScope.userRole !== 'undefined' && typeof $rootScope.userRole.currentUserRole !== 'undefined' && $rootScope.userRole.currentUserRole.userRole === 3 ) {

newMenu = [
{label: 'Home', route: '#/'},
{label: 'DNA', route: '#/dna'},
{label: 'Dna-list', route: '#/dna-list'},
{label: 'Admin', route: '#/admin'}
];

} else if (...) {
newMenu = [...];
} else {
newMenu = [...];
}

return newMenu;
}

我认为您遇到了在 Angular 领域之外更新 $scope 的问题,即 Angular 无法知道您正在更改 $scopetranslationSvc 中,因此您的更改不会传播到您的 View (index.html)。

我还建议沿相同的行编辑 translationSvc.getTranslation() 并删除将 $scope 传递给该函数。

关于javascript - 在 AngularJS 应用程序中登录后动态更改菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30807199/

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