我收到此错误:“TypeError - 无法在存储库函数的 promise 中设置未定义的属性‘select’”。
变量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 函数中引发了错误,所以我确信 Angular 不喜欢它。
=== 已编辑以包含更多代码。
这是我的 Controller 的相关部分:
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;
});
最佳答案
我得出的结论是,Angular 无法弄清楚如何处理对象数组,因此我尝试首先将对象创建为常规 JavaScript 变量,然后将其分配给作用域变量……并且成功了。
不过,我不会回答这个问题,因为可能有一种我不知道的“有 Angular ”的方式来做到这一点。
$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"
}
]
关于javascript - 将对象数组添加到 Angular 范围对象中 -- TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29418289/