将局部变量放在全局的angular.forEach循环中

时间:2016-09-07 18:25:46

标签: javascript angularjs

你好我在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);
    });

3 个答案:

答案 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()内,您会看到结果。