У меня есть шаблон:
<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
но без успеха.
Как я уже сказал в комментариях, вы можете попробовать заменить viewables['3d']
в ng-вариантах с помощью getViewables(value, '3d')
и вернуть контроллер в массив.
Если вы посмотрите на документы для 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()">
viewables
при обновленииdata
в контроллере?