Angular 控制器逻辑与 Vanilla JS 逻辑

Angular Controller Logic vs Vanilla JS logic

嘿,我正在尝试将 "players" 的数据库从我的节点后端提供给 angular 前端,然后在我的前端控制器中根据这些玩家构建花名册。

基本上,我正在尝试在我的 angular 控制器中执行我在下面发布的 javascript 所做的事情...除了我的平均应用程序之外,所有玩家都包含在一个对象中,并且首先需要按位置分开。然后就可以创建阵容了。

几天来我一直在修改我的控制器,试图让它工作,但我想不通我是如何...

首先是我的控制器,到目前为止,我可以将玩家列表保存到 $scope,但之后不知道如何继续...下面是 javascript 示例...

'use strict';

/**
 * @ngdoc function
 * @name clientApp.controller:PlayersCtrl
 * @description
 * # PlayersCtrl
 * Controller of the clientApp
 */
angular.module('clientApp')
  .controller('PlayersCtrl', function ($scope, Player, $q) {

    console.log(Player);
    $scope.players = Player.getList().$object;
    console.log($scope.players);


});

— End of Controller, vanilla JS below...

var SalaryCap = 60000;

var Roster = [];

var QBs = {
  DrewBrees : 8000,
  MattRyan : 7000,
  MatthewStafford : 6000,
  TomBrady : 10000,
  JayCutler : 6500,
  AaronRodgers : 9000,
  PhillipRivers : 8500,
  TeddyBridgewater : 6000

};

var RBs = {
  AdrianPeterson : 9000,
  ToddGurley : 9500,
  DevontaFreeman : 8500,
  FrankGore : 7000,
  MattForte : 7500,
  ArianFoster : 8000
};

var WRs ={
  DeAndreHopkins : 8900,
  OdellBeckhamJr : 8800,
  AntonioBrown : 8700,
  AJGreen : 8300,
  DezBryant : 8100,
  JulianEdelman : 8000,
  CalvinJohnson : 8000,
  DemaryiusThomas : 7900,
  EmmanuelSanders : 7800,
  RandallCobb : 7700,
  MikeEvans : 7700,
  // AlshonJeffery : 7600,
  // AllenRobinson : 7500,
  // LarryFitzgerald : 7400,
  // AllenHurns : 7300,
  // BrandinCooks : 7200,
  // AmariCooper : 7100,
  // JarvisLandry : 7000,
  // StefonDiggs : 6600,
  // JordanMatthews : 6600,
  // MartavisBryant : 6500,
  // JeremyMaclin: 6500,
  // WillieSnead : 6500,
  // PierreGarcon : 6400
};

var TEs = {
  RobGronkowski : 8000,
  GregOlsen : 6300,
  TylerEifert : 6200,
  GaryBarnidge : 6100,
  JimmyGraham : 6000,
  DelanieWalker : 5900,
  JordanReed : 5800,
  TravisKelce : 5800,
  JasonWitten : 5600,
  BenjaminWatson : 5500,
  RichardRodgers : 5400
};

var Ks = {
  StephenGostkowski : 5100,
  CalebSturgis : 5000,
  StevenHauschka : 5000,
  MasonCrosby : 5000,
  BlairWalsh : 4900,
  JustinTucker : 4900,
  BrandonMcManus : 4800,
  JoshBrown : 4800,
  ConnorBarth : 4800,
  KaiForath : 4700,
  ChandlerCantanzaro : 4700
};

var DEFs = {
  StLouisRams : 5400,
  DenverBroncos : 5200,
  CincinattiBengals : 5000,
  SeattleSeahawks : 4900,
  NewEnglandPatriots : 4900,
  GreenBayPackers : 4900,
  ArizonaCardinals : 4700,
  CarolinaPanthers : 4700,
  PhiladelphiaEagles : 4700,
  PittsburghSteelers : 4600,
  DallasCowboys : 4600,
  MinnesotaVikings : 4500,
  NewYorkGiants : 4500,
  MiamiDolphins : 4500,
  BaltimoreRavens : 4400
};

//////////////////////////////////////////////////
                // QUARTERBACK
//////////////////////////////////////////////////
function randomQuarterback(QBs) {

  var QB = [];

  var arrayOfAllKeys = Object.keys(QBs);
  // console.log(arrayOfAllKeys);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    QB.push(objKey, QBs[objKey]);
    Roster.push(QB);
  }
};

//////////////////////////////////////////////////
                // RB1
//////////////////////////////////////////////////
function randomRunningbackOne(RBs) {

  RB1 = [];

  var arrayOfAllKeys = Object.keys(RBs);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    RB1.push(objKey, RBs[objKey]);
    Roster.push(RB1);
  }
}

//////////////////////////////////////////////////
                // RB2
//////////////////////////////////////////////////

function randomRunningbackTwo(RBs) {

  RB2 = [];

  var arrayOfAllKeys = Object.keys(RBs);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    RB2.push(objKey, RBs[objKey]);
    Roster.push(RB2);
  }
}

//////////////////////////////////////////////////
                // WR1
//////////////////////////////////////////////////

function randomWideoutOne(WRs) {

  WR1 = [];

  var arrayOfAllKeys = Object.keys(WRs);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    WR1.push(objKey, WRs[objKey]);
    Roster.push(WR1);
  }
}

//////////////////////////////////////////////////
                // WR2
//////////////////////////////////////////////////

function randomWideoutTwo(WRs) {

  WR2 = [];

  var arrayOfAllKeys = Object.keys(WRs);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    WR2.push(objKey, WRs[objKey]);
    Roster.push(WR2);
  }
}

//////////////////////////////////////////////////
                // WR3
//////////////////////////////////////////////////

function randomWideoutThree(WRs) {

  WR3 = [];

  var arrayOfAllKeys = Object.keys(WRs);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    WR3.push(objKey, WRs[objKey]);
    Roster.push(WR3);
  }
}

//////////////////////////////////////////////////
                // TE1
//////////////////////////////////////////////////


function randomTEone(TEs) {

  TE1 = [];

  var arrayOfAllKeys = Object.keys(TEs);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    TE1.push(objKey, TEs[objKey]);
    Roster.push(TE1);
  }
}

//////////////////////////////////////////////////
                // K
//////////////////////////////////////////////////


function randomKicker(Ks) {

  K1 = [];

  var arrayOfAllKeys = Object.keys(Ks);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    K1.push(objKey, Ks[objKey]);
    Roster.push(K1);
  }
}

//////////////////////////////////////////////////
                // DEF
//////////////////////////////////////////////////


function randomDEF(DEFs) {

  DEF1 = [];

  var arrayOfAllKeys = Object.keys(DEFs);
  // console.log(arrayOfAllKeys);

  for(var i=0; i<1; i++){

    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);

    var objKey = arrayOfAllKeys[rnd];

    DEF1.push(objKey, DEFs[objKey]);
    Roster.push(DEF1);
  }
}

//////////////////////////////////////////////////
                // Roster Compiler
//////////////////////////////////////////////////

function rosterConstruction() {
  randomQuarterback(QBs);
  randomRunningbackOne(RBs);
  randomRunningbackTwo(RBs);
  randomWideoutOne(WRs);
  randomWideoutTwo(WRs);
  randomWideoutThree(WRs);
  randomTEone(TEs);
  randomKicker(Ks);
  randomDEF(DEFs);
}
rosterConstruction();
console.log(Roster);

//////////////////////////////////////////////////
                // Duplicates Filer
//////////////////////////////////////////////////

function eliminateDuplicates(roster) {

  var i;
  len=roster.length;
  console.log(len);
  var filteredRoster = [];
  obj={};

  for (i=0;i<len;i++) {
    obj[roster[i]]=0;
  }
  for (i in obj) {
    filteredRoster.push(i);
  }
  return filteredRoster;
};

var rosterWithoutDuplicates = eliminateDuplicates(Roster);
console.log(rosterWithoutDuplicates);


//////////////////////////////////////////////////
                // Salary Cap Check
//////////////////////////////////////////////////

function salaryCheck(roster) {
  var i = 0;
  var checker = [];
  for(i; i < roster.length; i++) {
    checker.push(roster[i][1]);
  }
  var sum = checker.reduce(add, 0);

  function add(a, b) {
    return a + b;
    // console.log(checker);
  }
  return sum;
};

var totalSalary = salaryCheck(rosterWithoutDuplicates);
console.log(totalSalary);

//////////////////////////////////////////////////
                // Final Compiler
//////////////////////////////////////////////////

function doubleCheck() {
  while(rosterWithoutDuplicates.length < 9 && totalSalary >= SalaryCap) {
    Roster = [];
    console.log(Roster);
    rosterConstruction();
    console.log(Roster);
    eliminateDuplicates();
    console.log(rosterWithoutDuplicates)
    salaryCheck();
    console.log(totalSalary);
    ;
    }
};
doubleCheck();
console.log(rosterWithoutDuplicates);

我要做的是将您的 'vanilla js' 放入一个服务中,然后将该服务包含在您的控制器中。

.factory('playersSrvc', function () {
  return {
    data: {
      // static data related with your domain
    },
    helpers: {
      // functions so logic that manipulates data etc.
    }
  }
}

.controller('playersCtrl', function ($scope, playersSrvc, $q) {
  $scope.data = playersSrvc.data;
  $scope.helpers = playersSrvc.helpers;

  console.log($scope.data.SalaryCap)  

});

也可以通过查看您的代码

1/ angular.module('clientApp') 缺少第二个参数(数组),它引用 clientApp 模块所依赖的模块列表(如果 none 则传递空 [])。

2/ 控制器名称的第一个字符必须小写。