AngularJS 选择了 Jquery 默认加载

AngularJS with Jquery Chosen Default Load

我正在使用 AngularJS 和 jquery 选择的插件来填充多个 select 表单。我的 Angular 代码有一个调用 node.js 网络服务的服务。所选 select 框的选项列表正在从 json 文件中填充,同时该值存储在 nodejs 服务的模型中。我一直在使用 this link 来指导我,但现在似乎卡住了。

我已经添加了代码 here

我选择的选项是这样填充的:

[
    {"id": 1, "name": "00:00", "value": 0},
    {"id": 2, "name": "00:15", "value": 900000},    
    {"id": 3, "name": "00:30", "value": 1800000}
    ...
]

但我的模型存储为: meal.dinnerTimes = ["06:15","18:30"]

所以当模型被服务和控制器加载时。 select 框在我希望看到的地方总是空白 “06:15”和“18:30”在这种情况下已经填充

如有任何帮助,我们将不胜感激

因为分配 model 时你只有 value,所以使用 select 作为 label for value in array 语法仅将 value 属性 分配给模型。

另请注意,您没有调用 MealSvc 工厂中提供的 callback 函数,因此,模型的值永远不会设置!

Plunker Demo

var app = angular.module("MealApp", ['MealService']);
var data = [{
  "id": 1,
  "name": "00:00",
  "value": 0
}, {
  "id": 2,
  "name": "00:15",
  "value": 900000
}, {
  "id": 3,
  "name": "00:30",
  "value": 1800000
}, {
  "id": 4,
  "name": "00:45",
  "value": 2700000
}, {
  "id": 5,
  "name": "01:00",
  "value": 3600000
}, {
  "id": 6,
  "name": "01:15",
  "value": 4500000
}, {
  "id": 7,
  "name": "01:30",
  "value": 5400000
}, {
  "id": 8,
  "name": "01:45",
  "value": 6300000
}, {
  "id": 9,
  "name": "02:00",
  "value": 7200000
}, {
  "id": 10,
  "name": "02:15",
  "value": 8100000
}, {
  "id": 11,
  "name": "02:30",
  "value": 9000000
}, {
  "id": 12,
  "name": "02:45",
  "value": 9900000
}, {
  "id": 13,
  "name": "03:00",
  "value": 10800000
}, {
  "id": 14,
  "name": "03:15",
  "value": 11700000
}, {
  "id": 15,
  "name": "03:30",
  "value": 12600000
}, {
  "id": 16,
  "name": "03:45",
  "value": 13500000
}, {
  "id": 17,
  "name": "04:00",
  "value": 14400000
}, {
  "id": 18,
  "name": "04:15",
  "value": 15300000
}, {
  "id": 19,
  "name": "04:30",
  "value": 16200000
}, {
  "id": 20,
  "name": "04:45",
  "value": 17100000
}, {
  "id": 21,
  "name": "05:00",
  "value": 18000000
}, {
  "id": 22,
  "name": "05:15",
  "value": 18900000
}, {
  "id": 23,
  "name": "05:30",
  "value": 19800000
}, {
  "id": 24,
  "name": "05:45",
  "value": 20700000
}, {
  "id": 25,
  "name": "06:00",
  "value": 21600000
}, {
  "id": 26,
  "name": "06:15",
  "value": 22500000
}, {
  "id": 27,
  "name": "06:30",
  "value": 23400000
}, {
  "id": 28,
  "name": "06:45",
  "value": 24300000
}, {
  "id": 29,
  "name": "07:00",
  "value": 25200000
}, {
  "id": 30,
  "name": "07:15",
  "value": 26100000
}, {
  "id": 31,
  "name": "07:30",
  "value": 27000000
}, {
  "id": 32,
  "name": "07:45",
  "value": 27900000
}, {
  "id": 33,
  "name": "08:00",
  "value": 28800000
}, {
  "id": 34,
  "name": "08:15",
  "value": 29700000
}, {
  "id": 35,
  "name": "08:30",
  "value": 30600000
}, {
  "id": 36,
  "name": "08:45",
  "value": 31500000
}, {
  "id": 37,
  "name": "09:00",
  "value": 32400000
}, {
  "id": 38,
  "name": "09:15",
  "value": 33300000
}, {
  "id": 39,
  "name": "09:30",
  "value": 34200000
}, {
  "id": 40,
  "name": "09:45",
  "value": 35100000
}, {
  "id": 41,
  "name": "10:00",
  "value": 36000000
}, {
  "id": 42,
  "name": "10:15",
  "value": 36900000
}, {
  "id": 43,
  "name": "10:30",
  "value": 37800000
}, {
  "id": 44,
  "name": "10:45",
  "value": 38700000
}, {
  "id": 45,
  "name": "11:00",
  "value": 39600000
}, {
  "id": 46,
  "name": "11:15",
  "value": 40500000
}, {
  "id": 47,
  "name": "11:30",
  "value": 41400000
}, {
  "id": 48,
  "name": "11:45",
  "value": 42300000
}, {
  "id": 49,
  "name": "12:00",
  "value": 43200000
}, {
  "id": 50,
  "name": "12:15",
  "value": 44100000
}, {
  "id": 51,
  "name": "12:30",
  "value": 45000000
}, {
  "id": 52,
  "name": "12:45",
  "value": 45900000
}, {
  "id": 53,
  "name": "13:00",
  "value": 46800000
}, {
  "id": 54,
  "name": "13:15",
  "value": 47700000
}, {
  "id": 55,
  "name": "13:30",
  "value": 48600000
}, {
  "id": 56,
  "name": "13:45",
  "value": 49500000
}, {
  "id": 57,
  "name": "14:00",
  "value": 50400000
}, {
  "id": 58,
  "name": "14:15",
  "value": 51300000
}, {
  "id": 59,
  "name": "14:30",
  "value": 52200000
}, {
  "id": 60,
  "name": "14:45",
  "value": 53100000
}, {
  "id": 61,
  "name": "15:00",
  "value": 54000000
}, {
  "id": 62,
  "name": "15:15",
  "value": 54900000
}, {
  "id": 63,
  "name": "15:30",
  "value": 55800000
}, {
  "id": 64,
  "name": "15:45",
  "value": 56700000
}, {
  "id": 65,
  "name": "16:00",
  "value": 57600000
}, {
  "id": 66,
  "name": "16:15",
  "value": 58500000
}, {
  "id": 67,
  "name": "16:30",
  "value": 59400000
}, {
  "id": 68,
  "name": "16:45",
  "value": 60300000
}, {
  "id": 69,
  "name": "17:00",
  "value": 61200000
}, {
  "id": 70,
  "name": "17:15",
  "value": 62100000
}, {
  "id": 71,
  "name": "17:30",
  "value": 63000000
}, {
  "id": 72,
  "name": "17:45",
  "value": 63900000
}, {
  "id": 73,
  "name": "18:00",
  "value": 64800000
}, {
  "id": 74,
  "name": "18:15",
  "value": 65700000
}, {
  "id": 75,
  "name": "18:30",
  "value": 66600000
}, {
  "id": 76,
  "name": "18:45",
  "value": 67500000
}, {
  "id": 77,
  "name": "19:00",
  "value": 68400000
}, {
  "id": 78,
  "name": "19:15",
  "value": 69300000
}, {
  "id": 79,
  "name": "19:30",
  "value": 70200000
}, {
  "id": 80,
  "name": "19:45",
  "value": 71100000
}, {
  "id": 81,
  "name": "20:00",
  "value": 72000000
}, {
  "id": 82,
  "name": "20:15",
  "value": 72900000
}, {
  "id": 83,
  "name": "20:30",
  "value": 73800000
}, {
  "id": 84,
  "name": "20:45",
  "value": 74700000
}, {
  "id": 85,
  "name": "21:00",
  "value": 75600000
}, {
  "id": 86,
  "name": "21:15",
  "value": 76500000
}, {
  "id": 87,
  "name": "21:30",
  "value": 77400000
}, {
  "id": 88,
  "name": "21:45",
  "value": 78300000
}, {
  "id": 89,
  "name": "22:00",
  "value": 79200000
}, {
  "id": 90,
  "name": "22:15",
  "value": 80100000
}, {
  "id": 91,
  "name": "22:30",
  "value": 81000000
}, {
  "id": 92,
  "name": "22:45",
  "value": 81900000
}, {
  "id": 93,
  "name": "23:00",
  "value": 82800000
}, {
  "id": 94,
  "name": "23:15",
  "value": 83700000
}, {
  "id": 95,
  "name": "23:30",
  "value": 84600000
}, {
  "id": 96,
  "name": "23:45",
  "value": 85500000
}];
app.directive('chosen', function() {
  var linker = function(scope, element, attr) {
    scope.$watch('availableTimes', function() {
      element.triggerHandler('chosen:updated');
    });
    scope.$watch('MealSvc.get()', function() {
      element.triggerHandler('chosen:updated');
    });
    element.chosen({
      width: "95%"
    });
  };
  return {
    restrict: 'A',
    link: linker
  }
});

app.controller("MealCtrl", function MealCtrl($scope, $window, $http, MealSvc) {
  $scope.times = [];
  $scope.availableTimes = [];

  $scope.fetchTimes = function() {
    $scope.availableTimes = data;
  }

  $scope.fetchTimes();
  MealSvc.get(function(res) {
    $scope.times = res.dinnerTimes;
  });
});

angular.module('MealService', []).factory('MealSvc', function($http) {
  return {
    get: function(response) {
      response({
        "name": "Second Tea",
        "dinnerTimes": [46800000, 57600000]
      })
    }
  }
});
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js" data-semver="2.2.0" data-require="jquery@*"></script>
  <link data-require="chosen@*" data-semver="1.0.0" rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/chosen/1.0/chosen.min.css" />
  <script data-require="chosen@*" data-semver="1.0.0" src="//cdnjs.cloudflare.com/ajax/libs/chosen/1.0/chosen.jquery.min.js"></script>
  <script data-require="chosen@*" data-semver="1.0.0" src="//cdnjs.cloudflare.com/ajax/libs/chosen/1.0/chosen.proto.min.js"></script>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link href="style.css" rel="stylesheet" />

  <script data-semver="1.2.28" src="https://code.angularjs.org/1.2.28/angular.js" data-require="angular.js@1.2.x"></script>
  <script src="app.js"></script>
</head>

<body>
  <div class="container" ng-app="MealApp" ng-controller="MealCtrl">
    <div class="row">
      <select data-placeholder="Select Dinner Time" multiple class="chzn-select" chosen ng-model="times" ng-options="times.value as times.name for times in availableTimes"></select>
    </div>
  </div>
</body>

</html>