2016-09-07 3 views
1

Здравствуйте, я создал переменную внутри цикла angle.forEach, который мне нужен за пределами цикла для привязки к области $ scope, но я не знаю, как выйти за пределы этого переменная miAlumno.Поместить локальную переменную в угловое. ForEach цикл в глобальном

Спасибо.

'use strict'; 

angular.module('jarciaApp') 
    .controller('alumnoCtrl', function($routeParams, $firebaseArray) { 

     var ref = firebase.database().ref('PrimeroA'); 

     var JarciaArray = $firebaseArray(ref); 

     var id = $routeParams.id; 

     var curso = $routeParams.curso; 

     var miAlumno; 


     JarciaArray.$loaded() 
      .then(function(miAlumno) { 
       angular.forEach(JarciaArray, function(alumno, miAlumno) { 
        if (alumno.Id == id) { 
         var miAlumno = alumno; 
        } 
       }) 
      }); 

     console.log(miAlumno); 
    }); 
+0

Не используйте 'var' на внутренней (это переопределяет' miAlumno'). Но даже это не будет регистрировать значение, где у вас есть 'console.log', поскольку' $ loaded() 'асинхронен. Вы можете просто сделать '$ scope.miAlumno' внутри цикла, если вы введете' $ scope'. –

+0

Я не ввожу $ scope, потому что я использую, я не знаю, как он называется, «как контроллер»? Я привязываю данные к области с помощью this.variable = ..... Но я не могу использовать его внутри цикла, потому что это не область внутри цикла. –

+0

Итак, тогда вне цикла добавьте 'var me = this;' и в цикле do 'me.miAlumno = alumno;'. Если вы говорите по-испански, возможно, 'var esto = this;' лучше :) , –

ответ

0

Не объявляйте переменную miAlumno в цикле. Объявите его снаружи, и он будет виден. Обратите внимание на ту консоль.log (miAlumno), она, вероятно, всегда будет нулевой из-за асинхронной привязки.

+0

Я удаляю ключевое слово var внутри цикла, но моя переменная miAlumno вне цикла не возвращает значение внутреннего цикла. –

+0

внутренний цикл является асинхронным, поэтому вы должны быть уверены, что проверяете внешнее значение только после выполнения цикла. Ты уверен? –

0

Если я правильно понял, вы хотите использовать переменную alumno, которую вы передали в функцию, выходящую за пределы этой функции?

Это можно сделать, создав/объявив глобальную переменную вне функции так же, как вы это сделали с miAlumno, а затем просто присвойте своей глобальной переменной значение, которое производит ваша функция. Также у вас есть miAlumno, объявленный дважды, один раз снаружи как глобальный, а затем внутри цикла for.

Извините, если я не понимаю, и если да, пожалуйста, уточните.

+0

Это то, что я хочу, но если создать внешнюю переменную miAlumno и попытаться осветить выпускник внутри цикла этой глобальной переменной, что-нибудь произойдет. miAlumno остаются такими же неопределенными. –

0

Похоже, вы используете синтаксис ControllerAs, что означает, что традиционные переменные области видимости автоматически связываются как свойства контроллера. Вы можете просто установить переменную внутри цикла, используя кэшированные значения this:

'use strict'; 

angular.module('jarciaApp') 
    .controller('alumnoCtrl', function($routeParams, $firebaseArray) { 

     var ref = firebase.database().ref('PrimeroA'); 

     var JarciaArray = $firebaseArray(ref); 

     var id = $routeParams.id; 

     var curso = $routeParams.curso; 

     var me = this; 

     JarciaArray.$loaded() 
      .then(function() { 
       angular.forEach(JarciaArray, function(alumno) { 
        if (alumno.Id == id) { 
         me.miAlumno = alumno; 
        } 
       }); 
       // This will work to show the value 
       console.log(me.miAlumno); 
      }); 

     // This still won't work, since $loaded is asynchronous 
     console.log(this.miAlumno); 
    }); 

Я также удаляла лишние попытки пройти miAlumno к then функции и функции обратного вызова для forEach; они не нужны.

Обратите внимание на комментарии относительно console.log. Я считаю, что $loaded() асинхронен; поэтому он не будет установлен до тех пор, пока не завершится какой-либо процесс. Если вы переместите log внутрь then(), вы увидите результат.

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