2016-02-27 1 views
1

Je ne peux pas sembler appeler la fonction addtoItems() dans le jQuery.Post J'ai besoin de rechercher des éléments pour chaque magasin, puis tout pousser dans le tableau this.items. Peut-être qu'il y a un moyen plus facile? Évidemment, je suis nouveau angulaire 2.Angulaire 2 avec problème de portée de fonction jQuery

import { 
 
    Page, 
 
    NavController, 
 
    NavParams, 
 
    Storage, 
 
    LocalStorage 
 
} from 'ionic/ionic'; 
 
import { 
 
    CalculatorPage 
 
} from '../calculator/calculator'; 
 

 
@Page({ 
 
    templateUrl: 'build/pages/storelookup/storelookup.html' 
 
}) 
 
export class StoreLookupPage { 
 
    constructor(nav: NavController, navParams: NavParams) { 
 
     this.nav = nav; 
 
     this.local = new Storage(LocalStorage); 
 
     // If we navigated to this page, we will have an item available as a nav param 
 
     this.selectedItem = navParams.get('item'); 
 
     this.items = []; 
 
    } 
 
    addtoItems(itemlist, storeid, phone, city, st, address, distance) { 
 
     for (var o = 0; o < itemlist.length; o++) { 
 
      this.items = [] 
 
      this.items.push(itemlist[o]); 
 
      this.items[o].storeid = storeid 
 
      this.items[o].phone = phone 
 
      this.items[o].city = city 
 
      this.items[o].st = st 
 
      this.items[o].address = address 
 
      this.items[o].distance = distance 
 
      console.log(this.items) 
 
     } 
 
    } 
 

 
    getItems(query) { 
 
     this.items = []; 
 
     var name = encodeURIComponent(name); 
 
     this.storelist = JSON.parse(this.local.get("stores")._result) 
 
     var i = 0; 
 
     var i1 = setInterval(function() { 
 

 
      this.local = new Storage(LocalStorage); 
 
      this.storelist = JSON.parse(this.local.get("stores")._result) 
 
      var storeid = Number(this.storelist[i].id); 
 
      var phone = this.storelist[i].phone; 
 
      var city = this.storelist[i].address.city; 
 
      var st = this.storelist[i].address.state; 
 
      var address = this.storelist[i].address.address1; 
 
      var distance = this.storelist[i].distance; 
 

 
      jQuery.post("http://www.walmart.com/store/ajax/search", { 
 
        searchQuery: "store=" + storeid + "&size=50&query=ipad&offset=0" 
 
       }) 
 
       .done((data) { 
 
        var storeresult = JSON.parse(data.searchResults); 
 
        var preitems = storeresult.results.filter(isUPC); 
 
        this.addtoItems(storeresult.results, storeid, phone, city, st, address, distance); //TypeError: _this.addtoItems is not a function 
 

 
        console.log(this.items) 
 
       }); 
 
      i++; 
 
      if (i === this.storelist.length) { 
 
       clearInterval(i1); 
 
      } 
 
     }, 1000); 
 

 
    }

+1

fonction fait changement to'.done ((données) => {...}) '. – Sasxa

Répondre

1

Utilisez arrow function

(x) => { ... } 

au lieu de

(x) { ... } 

et

function (x) { ... } 

puis this. fait toujours référence à la classe actuelle. Sinon, vous aurez besoin d'utiliser .bind(...)

Exemples de votre code

.done((data) { 
var i1 = setInterval(function() { 
+0

Merci beaucoup, cela a résolu ma question. – YourEvilMonk