2015-04-02 83 views
1

我收到此錯誤:「類型錯誤 - 無法設置屬性選擇'未定義的」在存儲庫函數的承諾。將對象數組添加到角度作用域對象 - 類型錯誤

變量obj包含一個對象數組。

.then(function (obj) { 
    // this works... 
    var abc = {}; 
    abc.title = "hello"; 
    abc.obj = obj; 

    // this doesn't work... 
    $scope.modelData = {}; 
    $scope.title = "Import"; 
    $scope.message = "Please select a Purchase Request" 
    $scope.select = obj; // <-- TypeError -- cannot set property 'select' of undefined' 

它提高了角度函數期間的錯誤,所以我確信它是Angular不喜歡它。

===編輯爲包含更多的代碼。

這裏是我的控制器中的相關內容:

var app = ipoModule.controller("ipoController", 
 
           function ($scope, $compile, $window, $http, $q, $log, ipoRepository, $routeParams, limitToFilter, $modal, ngTableParams) { 
 

 
    $scope.ipoRepository = ipoRepository; 
 

 
    //... not-relevant stuff 
 

 
    $scope.PRList = ipoRepository.getMvpPRs($scope.POHeader.warehouseId) 
 
      .then(function (obj) { 
 
       var modelData = {}; 
 
       modelData.title = "MVP Import"; 
 
       modelData.message = "MVP Purchase Request ID"; 
 
       modelData.select = obj; 
 
       $scope.modalData = modelData; 
 

 
       // then do more stuff but it breaks before that... 
 
      }) 
 
     .catch(function (err) { 
 
      $scope.HandleErrorDoc('Search Error', err) 
 
     }); 
 
}) 
 

 

,這裏是我的一些庫的

ipoModule.factory('ipoRepository', function($resource, $http) { 
 

 
    var genericGet = function(params, URL) { 
 
    return $http.get(URL, { 
 
     params: params 
 
    }).then(function(res) { 
 
     if (res.data) { 
 
     return res.data; 
 
     } else { 
 
     return null; 
 
     } 
 
    }); 
 
    }; 
 

 
    return { 
 
    getSearchResults: function(txt, chk, myPO) { 
 
     return genericGet({ 
 
     SearchText: txt, 
 
     excludeCompleted: chk, 
 
     MyPO: myPO 
 
     }, '/Search/GetSearchResults'); 
 
    }, 
 

 
    getMvpPRs: function(id) { 
 
     return genericGet({ 
 
     id: id 
 
     }, '/MvpUtility/GetMvpPRs') 
 
    } 
 
    } 
 
});

...現在...模塊

var ipoModule = angular.module('ipoModule', ['ngRoute', 'ngResource', 'ngGrid', 'ui.bootstrap', 'unsavedChanges', 'ngIdle', 'ngTable']) 
 
    .config(function($routeProvider, $locationProvider, unsavedWarningsConfigProvider) { 
 
    //$locationProvider.html5Mode(true); 
 
    unsavedWarningsConfigProvider.useTranslateService = false; 
 
    });

+0

你能添加一個更大的代碼片段嗎? '$ scope'被注入了嗎? – joemfb 2015-04-02 16:54:50

+0

聽起來像'$ scope'是未定義的。告訴我們你的控制器的其餘部分 – Tom 2015-04-02 16:59:52

+0

你能否請添加console.log(obj)? obj中有些問題。 – Samir 2015-04-02 17:10:36

回答

0

我來到那個角無法弄清楚如何處理對象數組的結論,所以我試圖創建對象作爲一個常規的JavaScript變量,然後將其分配給一個範圍變量......並且它工作。

我會離開這個未答覆,因爲可能有一個「角」的方式來做到這一點,我不知道。

 $scope.PRList = ipoRepository.getMvpPRs($scope.POHeader.warehouseId) 
 
      .then(function (obj) { 
 
       var modelData = {}; 
 
       modelData.title = "MVP Import"; 
 
       modelData.message = "MVP Purchase Request ID"; 
 
       modelData.select = obj; 
 
       $scope.modalData = modelData;

,這裏是什麼在我的OBJ變量返回的樣本:

[ 
 
    { 
 
    "prid": "0000", 
 
    "description": "PR0000 - j11-v1 test - youngm Jan 11" 
 
    }, 
 
    { 
 
    "prid": "0001", 
 
    "description": "PR0001 - j11-v1 test - youngm Jan 11" 
 
    }, 
 
    { 
 
    "prid": "0004", 
 
    "description": "PR0004 - j11-v1 test - j20-contractor Jan 20" 
 
    }, 
 
    { 
 
    "prid": "0005", 
 
    "description": "PR0005 - tigerdirect - yeungm Mar 01" 
 
    } 
 
]

0

我看到modelData和modalData在你的榜樣。 我假設你寫了水木清華像

$scope.modelData = {}; 
$scope.modalData.select = []; 

但這是不可能沒有的斷碼的完整版說。

或者,您錯過了第一版代碼中的$ scope注入。 無論如何,問題不是角度相關的。