你好我在angular.forEach循环中创建了一个变量,我需要在循环外部绑定到$ scope,但我不知道如何超越这个变量miAlumno。
感谢。
'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 :(得分:0)
不要在循环中声明变量miAlumno。在外面声明它,它将是可见的。 注意那个console.log(miAlumno),由于异步分配,它可能总是为空。
答案 1 :(得分:0)
如果我理解正确,您是否想要使用已传递到该函数范围之外的函数的alumno
变量?
您可以通过在函数外部创建/声明全局变量来完成它,就像使用miAlumno
一样,然后只需将全局变量赋值给函数生成的值。你也有miAlumno
声明两次,一次在外面作为全局,然后在for循环中。
如果我误解了道歉,如果是,请详细说明。
答案 2 :(得分: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()
内,您会看到结果。