Угловая переменная области действия 1.5 не определена в обратном вызове службы $http

Учитывая следующий Angular 1.5 Component Controller...

'use strict'

 function MyController($http){

    //The template variable for cloning on a form
    this.myVarTemplate = {};
    //The Data I wish to send to the server
    this.myVarTemplate.data = {};
    //Other form specific / callback data
    this.myVarTemplate.meta = {};
    this.myVarArray = [];
    //A container of raw data I'm parsing for example, on whitespace bound to a text input
    this.rawInput = '';

    this.parse = function(){
        var temp = this.rawInput.split(' ');
        for( var i = 0; i < temp.length; i++){
            var container = angular.copy(this.myVarTemplate);
            container.data = temp[i];
            this.myVarArray.push(container);
        }
    }

    this.upload = function(){
        for(var i = 0; i < this.myVarArray.length; i++){
            $http({
                method: 'POST',
                url: <url here>,
                data: this.myVarArray[i]
            }).then(function(response){
                //My Success callback won't work!!!!
                //Response logs successfully, data is retrieved
                console.log(response);
                //this.myVarArray.meta is undefined??
                //console.log(this.myVarArray) is undefined
                this.myVarArray[i].meta.reply = response.data;
            }, function(message){
                //Never been an issue here
                alert('Something Bad happened? doesn't happen');
            }).finally(function(){
                //Works
                this.myVarArray[i].meta.wasSent = true;
            });
        }
    }
})

Я пытаюсь вернуть пакет результатов AJAX-запросов в соответствующие им объекты формы. Кажется, что this.myVarArray не определен в контексте обратного вызова службы $ http. Почему это? Это причуда Angular или самого Javascript? Я понимаю, что служба $ http возвращает обещание, но это должно быть решено в контексте обратного вызова. Почему myVarArray не определен?

Заранее большое спасибо за понимание.

Отредактировано: исправлен мой пример кода...:)

1 ответ

Решение

this.myVarArray - это массив строк, основанный на том, что было выделено из необработанного ввода в вашем анализе. Вы пытаетесь присвоить свойство объекта (.meta) элементу строкового массива. Вы можете попробовать что-то вроде:

this.myVarObjArray;
this.rawInput = '';

this.parse = function(){
    var temp = this.rawInput.split(' ');
    var valArray = []
    for( var i = 0; i < temp.length; i++){
        valArray.push(angular.copy(temp[i]));
        this.myVarObjArray[i] = { val: valArray};
    }

}

this.upload = function(){
    angular.forEach(this.myVarObjArray, function(obj,v){
        $http({
            method: 'POST',
            url: <url here>,
            data: obj.val
        }).then(function(response){
            //My Success callback won't work!!!!
            //Response logs successfully, data is retrieved
            console.log(response);
            //this.myVarArray.meta is undefined??
            //console.log(this.myVarArray) is undefined
            obj.meta = {reply :response.data};
....
    })

По сути, вы пытаетесь присвоить свойство объекта элементу строкового массива. Это не сработает. Мой синтаксис не может быть на 100%. Если вы потянете в вантуз, я дам вам рабочий пример. Это должно привести вас на правильный путь.

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