Angularjs 安圭拉酒店;LoDash:组合API对象

Angularjs 安圭拉酒店;LoDash:组合API对象,angularjs,lodash,Angularjs,Lodash,--更新-- 更新的Plunker- 如果我取消对LoDash调用的注释,则所有内容仍会中断,但至少循环可以工作 以下所有代码已相应更新 --更新-- 我有一个API,它以“块”的形式为我提供数据,所以我尝试使用令人难以置信的LoDash创建一个可用的对象。我第一次申请LoDash就像从几笔贷款中提取一笔贷款一样有效。但是,当我尝试添加到该对象时,它停止工作 我已经创建了一个plunker,它显示了我需要的最终输出(在$scope.desired变量中)和我到目前为止拥有的代码-- 这是我的控制

--更新-- 更新的Plunker-

如果我取消对LoDash调用的注释,则所有内容仍会中断,但至少循环可以工作

以下所有代码已相应更新 --更新--

我有一个API,它以“块”的形式为我提供数据,所以我尝试使用令人难以置信的LoDash创建一个可用的对象。我第一次申请LoDash就像从几笔贷款中提取一笔贷款一样有效。但是,当我尝试添加到该对象时,它停止工作

我已经创建了一个plunker,它显示了我需要的最终输出(在$scope.desired变量中)和我到目前为止拥有的代码--

这是我的控制器:

    var app = angular.module('app',[]);

app.constant('_', window._)
  .run(function ($rootScope) {
    $rootScope._ = window._;
  });

app.controller('MainController', ['$scope', '_', function($scope, _) {
  $scope.loans = [
    {id: 1, selCropsId: ['1','3'], budget: 30000},
    {id: 2, selCropsId: ['1','2'], budget: 50000},
    {id: 3, selCropsId: ['2','3'], budget: 10000}
  ];

  $scope.crops = [
    {id: 1, crop: 'Cotton', uom: 'lb'},
    {id: 2, crop: 'Soybeans', uom: 'bu'},
    {id: 3, crop: 'Sugar Cane', uom: 'ton'}
  ];

  $scope.funduse = [
    {loan_id: 1, crop_id: 1, seed: 150},
    {loan_id: 1, crop_id: 1, fertilizer: 85},
    {loan_id: 1, crop_id: 3, seed: 300},
    {loan_id: 1, crop_id: 3, fertilizer: 175},
    {loan_id: 2, crop_id: 1, seed: 350},
    {loan_id: 2, crop_id: 1, fertilizer: 200},
    {loan_id: 2, crop_id: 2, seed: 500},
    {loan_id: 2, crop_id: 2, fertilizer: 250},
    {loan_id: 3, crop_id: 2, seed: 80},
    {loan_id: 3, crop_id: 2, fertilizer: 20},
    {loan_id: 3, crop_id: 3, seed: 125},
    {loan_id: 3, crop_id: 3, fertilizer: 60}
  ];

  $scope.loan = _.find($scope.loans, function(i) {
      return i.id == 2;
  });

  $scope.loan.crops = [];

  for(var c=0; c<$scope.loan.selCropsId.length; c++){
    $scope.loan.crops.push($scope.loan.selCropsId[c]);
    //$scope.loan.crops.push(getUse($scope.loan.selCropsId[c]));
  }

  function getUse(id){
    _.find($scope.crops, function(i){
      return i.id == selCropsId[c];
    });
  }

  $scope.desired = [
    {
      id: 2,
      selCropsId: ['1','2'],
      budget: 50000,
      crops: [
        {
          id: 1,
          crop: 'cotton',
          uom: 'lb',
          funduse: {
            seed: 350,
            fertilizer: 200
          }
        },
        {
          id: 2,
          crop: 'Soybeans',
          uom: 'bu',
          funduse: {
            seed: 500,
            fertilizer: 250
          }
        }
      ]
    }  
  ];

}]);
var-app=angular.module('app',[]);
应用常数(“窗口”)
.run(函数($rootScope){
$rootScope.\ux=window.\ux;
});
app.controller('MainController',['$scope','''.'函数($scope,'.')){
$scope.loans=[
{id:1,selCropsId:['1','3',,预算:30000},
{id:2,selCropsId:['1','2',,预算:50000},
{id:3,selCropsId:['2','3',,预算:10000}
];
$scope.crops=[
{id:1,作物:'棉花',计量单位:'磅'},
{id:2,作物:'大豆',计量单位:'bu'},
{id:3,作物:'甘蔗',计量单位:'吨'}
];
$scope.funduse=[
{贷款id:1,作物id:1,种子:150},
{贷款编号:1,作物编号:1,肥料编号:85},
{贷款编号:1,作物编号:3,种子编号:300},
{贷款编号:1,作物编号:3,肥料编号:175},
{贷款编号:2,作物编号:1,种子编号:350},
{贷款编号:2,作物编号:1,肥料编号:200},
{贷款编号:2,作物编号:2,种子编号:500},
{贷款编号:2,作物编号:2,肥料编号:250},
{贷款编号:3,作物编号:2,种子编号:80},
{贷款编号:3,作物编号:2,肥料编号:20},
{贷款编号:3,作物编号:3,种子编号:125},
{贷款编号:3,作物编号:3,肥料编号:60}
];
$scope.loan=\.find($scope.loan,函数(i){
返回i.id==2;
});
$scope.loan.crops=[];

对于(var c=0;c您的
getUse
函数中有两个bug

  • 第一个问题是,当您应该使用
    id
    参数时,您正在尝试使用
    selCropsId[c]
  • 第二个问题是,您没有返回
    .find
    调用的结果
这是您更新的
getUse
函数


我认为您应该能够找出如何获得所需的对象结构的其余部分。

我要说的是,这与angularjs无关,对吗?只是您希望将对象从一个结构转换到另一个结构——在这种情况下,您可以使用lodash,它肯定会有所帮助。我正在使用创建的API使用Laravel并在AngularJS前端使用它。我将LoDash注入控制器。如果有更好的方法——一种角度更好的方法——我愿意学习;否则,我只是想知道为什么LoDash第二次不能像第一次一样工作。
<!DOCTYPE html>
<html ng-app="app">

  <head>
    <link data-require="bootstrap-css@*" data-semver="3.2.0" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" />
    <script data-require="jquery@*" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script data-require="angular.js@1.3.0-rc.1" data-semver="1.3.0-rc.1" src="https://code.angularjs.org/1.3.0-rc.1/angular.js"></script>
    <script data-require="lodash.js@*" data-semver="2.4.1" src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-controller="MainController">
    <pre>{{ loan | json }}</pre>
    <pre>{{ desired | json }}</pre>
  </body>

</html>
  function getUse(id){
    // you need to return the result
    return _.find($scope.crops, function(i){
      return i.id == id; // you need to use the id parameter
    });
  }