Angularjs - зависимое свойство элементов массива не обновляется - PullRequest
0 голосов
/ 10 мая 2019

У меня есть эта переменная массива области действия

$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, которое зависит от прежнего

Что плохого я делаю или ожидаю?И как правильно этого достичь?

1 Ответ

2 голосов
/ 10 мая 2019

Получил вот так, преобразовав переменную в свойство

{
    name: 'My Restaurants',
    url: '#/myrestaurants',
    get isAvailable() {
        return $scope.global.roleId == constants.OWNER_USER_ROLE_ID;
    }
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...