Как загрузить контроллер после того, как другой выполнит http get?
У меня есть проблема, моя структура данных выглядит следующим образом:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
name: {type:String, required:true},
domain: {type:String, required:true},
kingdom: {type:String, required:true},
description: {type:String, required:true},
usages:[
{type : mongoose.Schema.ObjectId, ref : 'Usage'}
],
});
module.exports = mongoose.model('Flower',schema,'flowers');
В базе данных использования выглядит следующим образом:
"usages": [
{
"$oid": "59785b0c267c14036038324b"
}
],
после того, как я заполню страницу данными из http, получим:
var app = angular.module("flowerDataApp", []);
app.controller('dataPopulateController', function($scope, $http) {
$scope.flower=[];
$http.get('/api/flower').success(function(data) {
$scope.flower= data[0];
console.log(JSON.stringify($scope.flower.usages[0]))
});
});
Он регистрирует правильный идентификатор, и все в порядке. Однако в другом контроллере в том же файле я хотел бы получить идентификатор $scope.flower.usages[0] и извлечь из базы данных объект с этим идентификатором. Однако при доступе к функции обратного вызова вне этой переменной таким же образом (я попытался записать ее), это дает мне неопределенное значение. Как я могу сохранить (может быть, глобально) или передать этот идентификатор как-то другому контроллеру? Второй контроллер выглядит так:
app.controller('flowerModifyUsageCtrl', function($scope ,$http) {
console.log(JSON.stringify($scope.flower.usages[0])); //undefined
var id=$scope.flower.usages[0];
$http.get('/api/flower/test', {query: { _id:id}}).success(function(res{
$scope.usage=res[0];
});
});
РЕДАКТИРОВАТЬ: Когда я делаю в обратном вызове:
console.log(typeof ($scope.flower)); --> it prints object
console.log(typeof ($scope.flower.usages)); --> it prints object
console.log(typeof ($scope.flower.usages[0])); --> it prints string
Когда я делаю в flowerModifyUsageCtrl:
console.log(typeof ($scope.flower)); --> it prints object
console.log(typeof ($scope.flower.usages)); --> it prints undefined (and without typeof it prints empty array
console.log(typeof ($scope.flower.usages[0]));--> it prints Cannot read property '0' of undefined
Когда я пытался перейти на $ rootScope, происходит то же самое. Я выяснил это, вероятно, потому что второй контроллер пытается прочитать данные, которые еще не записаны. Как я могу реализовать задержку для выполнения второго контроллера или, может быть, даже лучше, проверить, когда первый закончит выполнение http get и при этом условии выполнить второй контроллер?