2014-08-27 49 views
0

每當我調用cardslength變量或只是cards.length,我都會在函數之外得到undefined。這是否意味着我需要使用$ scope?我正在使用角1.0.5順便說一句,因爲這是我正在遵循的教程的一部分,我需要使用該版本。Angularjs變量未定義在函數外部

這是我的代碼:

eventsApp.factory('eventData', function ($resource, $q) { 
var resource = $resource('/data/event/:id', {id: '@id'}); 


//////////////////////This is the part that doesn't seem to be working////////// 
var cardslength 
var cards = resource.query(function() { 
     cardslength = cards.length; 
     }); 
     console.log(cardslength); 
     console.log(cards.length); 
//////////////////////////////////////////////////////////////////////////////// 


return { 
    getEvent: function() { 
     var deferred = $q.defer(); 
     resource.get({id: 1}, 
      function (event) { 
       deferred.resolve(event); 
      }, 
      function (response) { 
       deferred.reject(response); 
      }); 

     return deferred.promise; 
    }, 
    save: function(event) { 
     var deferred = $q.defer(); 
     event.id = 1234; 
     resource.save(event, 
      function(response) { deferred.resolve(response);}, 
      function(response) { deferred.reject(response);} 
     ); 
     return deferred.promise; 
    } 
}; 
}); 
+1

這意味着resource.query()不返回任何東西,或者你的回調是執行返回的東西之前,整體服務質量差實現 – Ahmad 2014-08-27 10:16:02

+0

在函數內部它工作正常 – user1442232 2014-08-27 10:18:36

+0

在剛剛定義的函數之前,它有未定義的邏輯,在哪裏你可以訪問它,但它不起作用?還記得'cardslength'只有在query()完成時纔會有值 – Ahmad 2014-08-27 10:20:34

回答

1

console.log.query()完成之前執行。爲了避免這種情況,請嘗試如下:

var cards = resource.query(function() { 
    cardslength = cards.length; 
}).then(function(){ 
    console.log(cardslength); 
    console.log(cards.length); 
}); 
+0

這也讓我不確定。 – user1442232 2014-08-27 10:46:07

+0

其實,它不工作,因爲你正在使用Angular 1.0.5。以上答案僅適用於Angular 1.1.3及更高版本。 – khemry 2014-08-27 12:10:06

+0

Acteally我剛剛發現在最新的Angularjs中你需要使用$ promise.then(){}; – user1442232 2014-09-16 08:21:42