Angularjs 如何在布局中单击ng时添加类?

Angularjs 如何在布局中单击ng时添加类?,angularjs,Angularjs,以下是页面布局: <li class="dropdown"> <ul class="submenu"> <li ng-click="SetActiveMenuForPersonalInfo();"> <a href="../Account/#/PersonalInfo">@Translate("MY_ACCOUNT")<a> </li> </ul&

以下是页面布局:

<li class="dropdown">
    <ul class="submenu">
        <li ng-click="SetActiveMenuForPersonalInfo();">
            <a href="../Account/#/PersonalInfo">@Translate("MY_ACCOUNT")<a>
        </li>
    </ul>
</li>

当用户单击版面上的“我的帐户”时,如何更改
$scope.activeMenu
$scope.activeLink
?控制台为
$scope.activeMenu
打印“设置”,这意味着它在函数中,但什么都没有发生。可能是因为我在函数中放入了
$scope.activeMenu

是否尝试停止事件传播?如果不是这样,请尝试将其添加到子元素中

$scope.SetActiveMenuForPersonalInfo = function ($event)
{
    $event.stopPropagation();
    $scope.activeMenu = 'Settings';
    $scope.activeLink = "PersonalInfo";
    console.log("Active menu: ",$scope.activeMenu);
}

在您的plnkr中,缺少用于活动链接的css,我将单击链接的分配包装在一个函数中

检查更新的plnkr

功能非常基本:

$scope.changeActiveLink = function(link) {
    $scope.activeLink = link;
}
现在,单击时链接是绿色的。这就是你想要的,对吗?也许颜色不同,但原理是一样的

如果您想在单击“联系人”或“关于”时删除绿色,您也可以将其包装在一个函数中,如下所示:

$scope.changeActiveMenu = function(menu) {
    if($scope.activeMenu == 'Settings' && menu != 'Settings') {
        $scope.activeLink = '';
    }

    $scope.activeMenu = menu;
}
更新

我终于明白你的意思了,我想。。通过单击链接,您可以更改视图,从而重新实例化控制器。这就是为什么activeMenu是空的。如果您创建一个服务并将当前活动的菜单存储在其中,它将不会为空


我已更新plnkr以包含服务。我不能完全测试它,因为我还没有你的整个项目代码,但有了这个作为指导,你应该能够让它工作

在plnkr中,活动链接不起作用。用activelink替换它的工作原理…它只需要“activelink”,但这不是重点,因为我需要从layoutunaway传递值,如果我理解正确的话,您希望这些条像单击“联系人/关于”等时一样呈红色?是的,但从布局中…不知何故,当我在布局中单击它时,它不起作用…$scope.activeMenu是空的…“on layout”是什么意思?我尝试了如下设置ActiveMenuForPersonalInfo($event);但它不起作用,您是否尝试向子元素添加stoppropagation。或者尝试将ng click指令绑定到标记而不是
  • 。您可以将样式设置为像一个
  • 框一样执行。我得到以下错误:无法读取未定义的属性“stopPropagation”.我对该菜单没有问题…我有问题,当用户尝试从布局中单击菜单时,它不起作用,因为$scope为空。我想我现在得到了您想要的,检查我的最新答案是的,我想那是…只是我不知道如何创建服务…我尝试过,但没有成功你能帮我写服务吗?
    $scope.changeActiveMenu = function(menu) {
        if($scope.activeMenu == 'Settings' && menu != 'Settings') {
            $scope.activeLink = '';
        }
    
        $scope.activeMenu = menu;
    }