2013-09-01 2 views
0

Я пытаюсь получить доступ к переменной np, определенной из функционального блока; однако я сталкиваюсь с некоторыми проблемами, когда звоню this.items.push(plumbers). Я получаю TypeError: Cannot call method push of undefinedAngularJS/JS Как получить доступ к переменным вне моей функции?

myApp.factory('np', function($resource, nearbyPlumbers){ 
    var np = function(){ 
    this.items = []; 
    this.busy = false; 
    this.limit = 5; 
    this.offset = 0; 
    }; 

    np.prototype.nextPage = function(){ 
    if (this.busy) return; 
    this.busy = true; 

    var temp; 

    nearbyPlumbers.nearby({lat: -37.746129599999996, lng: 144.9119861}, function(data){ 
     angular.forEach(data, function(plumber){ 
     alert('yay'); 
     //this.items.push(plumber); 
     console.log(plumber); 
     console.log(this.items); // <--- This wont work. How do I access this.items 
     }); 
    }); 
    }; 
    return np; 
}); 

ответ

1
np.prototype.nextPage = function() { 
    if (this.busy) return; 
    this.busy = true; 

    var temp; 
    var that = this; // add this line 

    nearbyPlumbers.nearby({ 
     lat: -37.746129599999996, 
     lng: 144.9119861 
    }, function (data) { 
     angular.forEach(data, function (plumber) { 
      that.items.push(plumber); //access using "that" 
      console.log(plumber); 
      console.log(that.items); 
     }); 
    }); 
}; 
+0

AWESEOME! Прекрасно работает! –

0

Я очень любопытно, почему вы используете this, так как он будет отличаться в зависимости от this какой объем доступа к синглтон из. Это объясняет ошибку, которую вы получаете.

Я бы настоятельно рекомендовал читать на заводах в Угловом, а затем еще раз взглянуть на код. services docs are a good place to start и this question также хороши.

+1

Я вроде как взломал это atm, из этого демо-кода http://binarymuse.github.io/ngInfiniteScroll/demo_async.html, так что да, может быть, плохая практика. Был надеяться заставить его работать, а затем реорганизовать. –

+0

@ryanwkan Хороший звонок. Решение Sza, безусловно, получит его в рабочее состояние. Затем вы можете реорганизовать, чтобы сделать его более «угловым-y». Я не могу погладить «угловой способ» делать то, что вы хотите сделать, но я чувствую, что есть способ. – Jon7

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