gpt4 book ai didi

javascript - 使用 ngif 时 ngclass 的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 12:26:46 25 4
gpt4 key购买 nike

我有这段代码:

....
<article class="collapse navbar-collapse">
<ul ng-if="isLogged()" class="nav navbar-nav">
<li ng-class="{'active': activeUrl === 'projects'}">
<a href="#/projects" ng-click="activeUrl='projects'">Projects</a>
</li>
<li ng-if="isAdmin()" ng-class="{'active': activeUrl === 'admin'}">
<a href="#/admin" ng-click="activeUrl='admin'">Administration</a>
</li>
</ul>
</article>

点击链接时应该添加active类。在我添加模拟用户身份验证的 ng-if 表达式之前,它工作得很好。现在,当它添加一次 active 类时,它不会在单击另一个导航链接时删除此类 - 看起来同时打开了 2 个页面。applicationController 具有模拟功能:

applicationController= function($scope, Restangular, userService){
$scope.activeUrl = "admin";
$scope.data = {
user: {
email: undefined,
password: undefined
}
};

$scope.login = function(user){
//login mock
};

$scope.isLogged = function(){
return userService.isLogged();
};

$scope.isAdmin = function(){
return userService.isAdmin();
};
};

userService 具有确定用户是否经过身份验证以及是否是管理员的逻辑。我不认为在一个 HTML 元素中使用 ng-ifng-class 是不寻常的,这就是为什么我认为我一定犯了一些我不能犯的简单错误看。单击后是否重新创建范围?如果有人帮助我,我会很高兴 - 提前谢谢你!更新:@ptwo 帮助的解决方案,我需要 $parent 和管理 $parent.$parent:

<article class="collapse navbar-collapse">
<ul ng-if="isLogged()" class="nav navbar-nav">
<li ng-class="{'active': $parent.activeUrl === 'projects'}">
<a href="#/projects" ng-click="$parent.activeUrl='projects'">Projects</a>
</li>
<li ng-if="isAdmin()" ng-class="{'active': $parent.$parent.activeUrl === 'admin'}">
<a href="#/admin" ng-click="$parent.$parent.activeUrl='admin'">Administration</a>
</li>
</ul>
</article>

更新 2 解决方案无需直接访问 $parent,但在 applicationController 中使用 data 对象,这允许我访问 activeUrl:

<article class="collapse navbar-collapse">
<ul ng-if="isLogged()" class="nav navbar-nav">
<li ng-class="{'active': data.activeUrl === 'projects'}">
<a href="#/projects" ng-click="data.activeUrl='projects'">Projects</a>
</li>
<li ng-if="isAdmin()" ng-class="{'active': data.activeUrl === 'admin'}">
<a href="#/admin" ng-click="data.activeUrl='admin'">Administration</a>
</li>
</ul>
</article>

applicationController= function($scope, Restangular, userService){
$scope.data = {
activeUrl: "admin",
user: {
email: undefined,
password: undefined
}
};
....

最佳答案

使用函数更改 activeUrl。在 View 中包含表达式从来都不是一个好习惯。

<article class="collapse navbar-collapse">
<ul ng-if="isLogged()" class="nav navbar-nav">
<li ng-class="{'active': isActiveUrl('projects')}">
<a href="#/projects" ng-click="updateActiveUrl('projects')">Projects</a>
</li>
<li ng-if="isAdmin()" ng-class="{'active': isActiveUrl('admin')}">
<a href="#/admin" ng-click="updateActiveUrl('admin')">Administration</a>
</li>
</ul>
</article>

applicationController= function($scope, Restangular, userService){
$scope.data = {
activeUrl: "admin",
user: {
email: undefined,
password: undefined
} };
$scope.isActiveUrl = isActiveUrl;
$scope.updateActiveUrl = updateActiveUrl;

function isActiveUrl(param){
return $scope.data.activeUrl == param;
}

function updateActiveUrl(param){
$scope.data.activeUrl = param;
}
}

想法是从它自己的作用域中改变父作用域的成员变量,而不是 ng-if 的子作用域。

关于javascript - 使用 ngif 时 ngclass 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082358/

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