Как загрузить контроллер после того, как другой выполнит 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 и при этом условии выполнить второй контроллер?

0 ответов

Другие вопросы по тегам