2015-11-08 59 views
0

我有一個Angularjs控制器得到Parse對象:集解析對象列表,選擇標籤與Angularjs

function MyController() { 
    var self = this; 
    var listObjects; 

    function getObjects() { 
     var myObject = Parse.Object.extend("MyObject"); 
     var query = new Parse.Query(myObject); 

     query.find().then(function(objects) { 
      for (var i = 0; i < objects.length; i++) { 
       var object = objects[i]; 
       self.listObjects.push(object); 
      } 
     }, function(error) { 
      console.log("ERROR: " + error); 
     }); 
    } 

    getObjects(); 

    self.getObjects = getObjects; 
} 

,我嘗試使用設置對象的<select>該列表:

<select ng-options="object.Name for object in myController.listObjects"></select> 

我的問題是,listObjects似乎無法在我的function訪問。如果我在我的函數中對我的listObjects執行console.log(),它會回到未定義狀態。頁面加載時有沒有辦法填充我的select?我也嘗試從onLoad調用我的功能,並沒有奏效。任何建議,將不勝感激。

+0

其中類別的到來? –

+0

'var listObjects = [];' – rpirsc13

回答

2

你沒有使listObjects是一個數組(或任何東西),因此它是未定義的。

變化

var listObjects; 

var listObjects = []; 

,現在你有機會獲得array.prototype方法等

的jsfiddle示範:http://jsfiddle.net/chrislewispac/0bmd2rxd/

+0

這沒有奏效,我仍然收到一個錯誤:'TypeError:undefined不是一個對象(評估'self.listObjects.push')' –

+0

self.listObjects不同於var = listObjects。要麼在兩個地方都使用自己,要麼根本不使用自己。 http://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/ –

0

首先您需要在控制器範圍內定義共享對象。

$scope.listObjects = ....

那麼你可以做

<select ng-options="object.Name for object in listObjects track by object.id"></select> 

這將產生對的ListObject每個對象的<option>標籤像

<option value="value got from object.id">object.Name</option> 

這是使用丁的另一種方式納克在選項標籤上重複如下

<select> 
    <option ng-repeat="object in listObjects" value="{{object.id}}">{{object.Name}}</option> 
</select> 

您還需要在控制器的$範圍內定義listObjects。

+1

還有其他使用控制器的方法。還有一種叫做「控制器爲」的語法。 http://toddmotto.com/digging-into-angulars-controller-as-syntax/ –

+1

我實際上在'config'中設置'controller',這就是爲什麼我沒有在我的html中指定'controller as' –

+0

好吧,那麼有道理。 @ChrisL指出,我從未將控制器用作sytanx。現在很清楚,問題在於你正在將對象推送到一個未定義的變量。 – rpirsc13