Das ist, wie ich dieses Problem beheben mit AngularJS, Angular Ressourcen & Ui-Router mit Verbindungen in einer Entität ausgewähltes Objekt anzuzeigen:
Da wir in einer einfachen Beziehung zu Unternehmen haben:
Klasse: Name (String), Ebene (String). ----> Eine Klasse in der Schule.
Kind: Name (String), Pseudo (String). ----> Ein Kind.
Ein Kind kann in einer Klasse sein und es gibt viele Klassen in der Schule. So können wir etwas davon haben (ein One-To-One):
Klasse: Name (String), Ebene (String). ----> Eine Klasse in der Schule.
Kind: Name (String), Pseudo (String), Klasse (Klasse). ----> Ein Kind.
In meinem Ui-Router Zustand, den ich so etwas tun, wenn ein Kind Bearbeitung: , dass der Zustand des Kindes zu bearbeiten, wenn Sie auf einen Link, um es entsprechende wir ihn abfragen und einen Controller verwenden zu lösen die Entität, die mit ihm verbunden ist.
.state('child-edit', {
parent: 'entity',
url: '/child/{id:int}',
views: {
'[email protected]': {
templateUrl: 'path/to/chil/view/child-edit.html',
controller: 'ChildEditController'
}
},
resolve: {
translatePartialLoader: ['$translate', '$translatePartialLoader', function ($translate, $translatePartialLoader) {
$translatePartialLoader.addPart('child');
return $translate.refresh();
}],
entity: ['$stateParams', 'ChildService', function($stateParams, ChildService) {
// We return the child to edit using a service.
return ChildService.get({id : $stateParams.id});
}]
}
})
Das ist der Controller ich diesen Lauf normalerweise machen verwenden:
angular.module('myApp').controller('ChildEditController',
['$scope', '$stateParams', '$q', 'entity', 'ClassService',
function($scope, $stateParams, $q, entity, ClassService) {
// We get all classes of school here.
$scope.classes = ClassService.query();
// That is the promise of child to edit get from resolve in state.
$scope.childToEdit = entity;
$q.all([$scope.classes.$promise, $scope.childToEdit.$promise]).then(function() {
// When all data are resolved
// In Js two objects with same properties and valyes but different memory allocation are different.
// So I test value of Id before setting the right class of this child and angular will make able to edit
// him in the UI with the ng-model
var classOfChild = $scope.childToEdit.class;
for (var k in $scope.classes) {
if ($scope.classes[k].id === classOfChild.id) {
// We put the same reference of this class: then it will be selected in the UI of select box
$scope.childToEdit.class = $scope.classes[k];
}
}
});
}]);
und die damit verbundene UI in HTML:
<!-- The name of Child -->
<div class="form-group">
<div class="col-md-4">
<label for="field_child_name">Name of Child</label>
<input type="text" class="form-control" name="name" id="field_child_name"
ng-model="childToEdit.name"
required />
</div>
</div>
<!-- Selected class of child will be display here with all other classes available -->
<div class="form-group">
<div class="col-md-4">
<label for="field_child_class">Class of Child</label>
<select class="form-control" id="field_child_class" name="class" ng-model="childToEdit.class" ng-options="class as class.name + ' : ' + class.level for class in classes">
<option value=""></option>
</select>
</div>
</div>
Hinweis: Hoffe, es ist die gleiche Situation, in der Die ausgewählten Daten werden nicht angezeigt, da sich die Referenzen der abfragenden Klasse und der Eigenschaftenklasse im untergeordneten Objekt unterscheiden.
Sie können Ihre Steuerung deaktivieren, während die Daten nicht vorhanden sind. Benutze 'ng-disabled = '! Data'' oder erstelle ein Flag' requestIsReady und setze sie auf' Ajax 'oder' finally 'auf' true '. –
Ich habe schon diese Art von Situation, aber bitte, mehr Beschreibung ist erforderlich, um Ihnen besser zu helfen. Verwenden Sie Ui-Router? Können Sie ein Beispiel schreiben, wie Sie Ihre Daten erhalten und anzeigen? –