angularjs - Angularjs - 数组项依赖属性未更新
问题描述
我有这个范围数组变量
$scope.menuItems = [
{
name: 'Login',
url:'#/login',
isAvailable: true
},
{
name: 'Register',
url: '#/register',
isAvailable: $scope.global.roleId == null
},
{
name: 'My Restaurants',
url: '#/myrestaurants',
isAvailable: $scope.global.roleId == constants.OWNER_USER_ROLE_ID
},
{
name: 'Create Restaurant',
url: '#/createrestaurant',
isAvailable: $scope.global.roleId == constants.OWNER_USER_ROLE_ID
},
{
name: 'Logout',
url: '#/logout',
isAvailable: $scope.global.roleId != null
}
];
此对象依赖于另一个范围变量$scope.global.roleId
我正在像这样从这个数组加载菜单
<ul class="nav navbar-nav">
<li ng-repeat="n in menuItems | filter:{isAvailable:true}">
<a href="{{n.url}}">{{n.name}}</a>
</li>
</ul>
我希望它在更新时自动更新菜单$scope.global.roleId
。
需要注意的是,我正在$scope.global.roleId
从子控制器更新此变量,并且此字段正在正确更新,但它不影响数组字段isAvailable
。
我检查了变量$scope.global.roleId
和$scope.menuItems
日志,并且$scope.global.roleId
每次都正确更新,但不是$scope.menuItems.isAvailable
依赖于前者的字段
我做错了什么或期待什么?实现这一目标的正确方法是什么?
解决方案
像这样实现的,将变量转换为属性
{
name: 'My Restaurants',
url: '#/myrestaurants',
get isAvailable() {
return $scope.global.roleId == constants.OWNER_USER_ROLE_ID;
}
},
推荐阅读
- amazon-web-services - 处理代码管道时出现错误“文件在工件 [SourceArtifact] 中不存在”
- android-studio - 如何在 Android Studio 中构建 LAPACK
- sql - 如何将函数结果分配给 SELECT 的 WITH 子句中的名称?
- r - 如何使用 rgbif 一次从多个多边形下载发生数据?
- swift - Google 身份验证:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“必须设置presentingViewController。”
- isabelle - Isabelle 终止对包含自身映射的数据类型的函数
- python-3.x - 将 MultiDiGraph 读取为 dict-of-dicts 会忽略 multigraph_input
- php - Laravel:使用 Varnish 和 CSRF 令牌
- powershell - For-each 循环和 IF 语句:检查正在运行的进程 ID 号
- python - 将子列表中的每三个元素附加到字典