Как заставить угловые детские прицелы освежиться?

0

У меня есть шаблон:

<div class="oss-object cp-def cp-row" ng-repeat="(key, value) in data" ng-init="viewables = getViewables(value.versions[0].objectInfo);">
        <div class="cp-def">
            {{value.info.name}} OssStatus: {{value.versions[0].objectInfo.status}}
            , 3D-Viewables:
                <select ng-change="viewableSelected(value.versions[0].urn, viewables, '3d')" ng-model="viewables.selected3d" ng-options="viewable as viewable.name for viewable in viewables['3d']">
                    <option value="">---Please select---</option>
                </select>
            , 2D-Viewables:
                <select ng-change="viewableSelected(value.versions[0].urn, viewables, '2d')" ng-model="viewables.selected2d" ng-options="viewable as viewable.name for viewable in viewables['2d']">
                    <option value="">---Please select---</option>
                </select>
        </div>
    </div>

И когда данные обновляются (свойство данных, используемое в верхнем ng-repeat) в моем контроллере с новым набором данных, оно автоматически не обновляет дочерние области в ng-options. которые получены из набора данных. Кто-нибудь знает, как обновить дочерние scopes? Я попробовал называть $apply и $digest но без успеха.

  • 0
    Как насчет обновления viewables при обновлении data в контроллере?
  • 0
    viewables - это свойство дочерней области внутри ng-repeat, не так ли? новое свойство viewables создается в каждом цикле ng-repeat и вычисляется по под-свойствам значения в данных, и я предполагаю, что оно не достижимо в родительском контроллере
Показать ещё 4 комментария
Теги:

2 ответа

1
Лучший ответ

Как я уже сказал в комментариях, вы можете попробовать заменить viewables['3d'] в ng-вариантах с помощью getViewables(value, '3d') и вернуть контроллер в массив.

1

Если вы посмотрите на документы для ngInit, вы увидите, что они в основном говорят "никогда не используйте это, кроме как в вложенных ngRepeats ". Один из способов сделать то, что вы хотите, - создать контроллер для каждого повторяющегося элемента и создать $watch для данных, которые изменяются (или выражение в этом случае), и устанавливать равные ему viewables.

например

function ViewablesCtrl($scope){
   $scope.$watch($scope.getViewables, function(){$scope.viewables = $scope.getViewables($scope.value.versions[0].objectInfo);}
})

-

<div class="oss-object cp-def cp-row" ng-repeat="(key, value) in data" ng-controller="ViewablesCtrl()">

Ещё вопросы

Сообщество Overcoder
Наверх
Меню