2015-04-10 1 views
0

В моем приложении MEANJS. Я устанавливаю значение переменной области видимости в результате запроса из моей функции контроллераНевозможно получить доступ к переменной области видимости с использованием запроса Mongoose в контроллере

$scope.myVar = User.query(); 
console.dir($scope.myVar);  //Returns all the documents from the DB correctly 
console.log('User's name is : ' + $scope.myVar[0].name); //This comes as undefined 

Так или иначе, в следующей строке, когда я пытаюсь открыть имя поля в пределах одной и той же функции контроллера, оно приходит как не определено. Кроме того, весь результат читается абсолютно правильно в моем файле просмотра. Поэтому, когда я позвоню

{{myVar.name}} 

В моем файле просмотра он выводит имя правильно. Я не понимаю этого поведения вообще. Это мой первый опыт работы с Angularjs, и я мог пропустить что-то основное, но я ценю любую помощь на этом этапе.

Edit - Кроме того, длина $ scope.myVar всегда 0 в контроллере

+1

Это волшебство для браузера. :) Когда вы расширяете объект из console.dir, консоль повторно запрашивает данные из var, отображая, таким образом, заполненный документ. С другой стороны, console.log генерирует строку на основе содержимого myVar в этот момент времени и не обновляет ее, когда объект доступен. –

+0

Ничего себе, спасибо за этот самородок, в аду не было никакого способа, я бы подумал, что один из них. Но моя проблема сохраняется, потому что мне нужно выполнить некоторые операции над $ scope.myVar после того, как она получит результат запроса. Для чего мне нужно запустить его с помощью $ scope.myVar.length. Но в этом случае длина всегда равна 0. Никакой браузер не задействован здесь, но я все еще не могу получить доступ к $ scope.myVar внутри контроллера. – KVNam

+0

Вам необходимо использовать выполненный или успешный обратный вызов отправляемого запроса, чтобы код не работал до тех пор, пока не будут данные для его взаимодействия. –

ответ

0

EDIT: Нашел ответ. Функции обратного вызова в meanjs в этом формате:

var myObj= User.query(function(response) { 
       console.log('Inside success response'); 
       //Can access myObj values here easily 
      }, function(errResponse) { 
       console.log('Inside error response ' + errResponse); 
     }); 

Я не был в состоянии понять, как получить доступ к моему $ scope.myVar в контроллере, но я закончил обходной путь, создав свой собственный фабричный метод для извлечения данные, которые я хотел бы отсортировать. Проблема неспособности получить доступ к этим результатам запроса действительно создает проблему и в других частях. Поэтому, если у кого-то есть ответ, пожалуйста, дайте мне знать.

На данный момент опубликовано сообщение, которое я использовал, чтобы выяснить, как должен быть подключен заводской метод MEAN.JS. Надеюсь, это поможет кому-то.

https://groups.google.com/forum/#!searchin/meanjs/query()/meanjs/4R7rIolH9bs/P1R4YlKgowUJ

0

В основном User.query() возвращает объект обещание, так что вам нужно обновить вам $scope объект внутри обещание успеха.

Код

User.query().$promise.then(function(res){ 
    //you will get response here in data obj 
    $scope.myVar = res; 
    console.dir($scope.myVar);//Returns all the documents from the DB correctly 
    console.log('User's name is : ' + $scope.myVar[0].name); //This comes as undefined 
}); 
+0

Я пробовал это, но он дает ошибку, заявляя, что undefined не является функцией в строке, которую я добавил. Then (function ...) to. Я нашел это решение в группе MEAN.JS Google, которая объясняет, что User.query() является заводским вызовом, который затем вызывает функцию сервера. Поэтому я не могу добавить к этому никаких других функций. Все еще не объясняет, почему я не могу прочитать значение myVar в моем контроллере, хотя, попробовав работу: /. Благодарю. – KVNam

+0

@ monologish не могли бы вы рассказать мне, что такое '.query() 'это custom factory /' $ http' call/'$ resource' call –

+0

a $ resource call – KVNam

Смежные вопросы