javascript - 将对象数组添加到 Angular 范围对象中 -- TypeError

标签 javascript angularjs angularjs-scope

我收到此错误:“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/

相关文章:

javascript - 在输入表单下方显示错误消息

javascript - 如何获取 Controller 中子DOM的$attrs数据?

javascript - 关于在javascript中使用数组进行web编程的问题

javascript - 使用 Edge 和 Safari 浏览器在网格内溢出

javascript - 具有多个模板的 AngularJS 指令

javascript - 如何使用 angularjs 过滤器在标题上添加排序?

javascript - angularJS:为什么绑定(bind)到指令内的范围会导致 ng-repeat 的内容丢失?

javascript - 从 Angular $scope promise 中删除一行

javascript - 获取选定文本的所有 DOM block 元素

javascript - Linux Mint 上的 Nodejs 最新版本