AngularJS 使用 selectize 和 ng-repeat 设置 multi-select 下拉菜单的值
AngularJS set values of multi-select drop-down using selectize and ng-repeat
通过这个例子(JS Bin of pure html select tag)我可以实现纯粹的htmlselect倍数。
但我正在使用 selectize 插件
https://selectize.github.io/selectize.js/
对于下拉菜单 multi-select,我很困惑如何填充已经 selected 的值。?
这是我试过的 我的 HTML:
<div ng-repeat="item in items">
<select
multiple
class="selectSkill"
ng-model="item.storedArray"
ng-options="opt.skillId as opt.skillName for opt in skills"
></select>
</div>
我的客户:
$scope.$selectSkill= $('.selectSkill').selectize({
valueField: 'skillId',
labelField: 'skillName',
searchField: 'skillName',
maxItems: 5,
placeholder:"Select Skill",
options: $scope.skills,
create: false,
sortField: {
field: 'skillName',
direction: 'asc'
}
});
$scope.selectizeControlSkills = $scope.$selectSkill[0].selectize;
我正在加载 selectize with class-based(selectSkill
).
没有 populate 正常负载工作,但我正在尝试使用 selectize 动态设置值。
感谢您的帮助。
我的演示数据:
**$scope.skills**
**item.storedArray**
张贴我创建的示例作为答案,因为它似乎对 OP 有所帮助。
这里的建议是不要将 Selectize 与 ng-model
和 ng-options
混合使用,因为如果应用于相同的 select
元素,它们在功能上会相互冲突。
如果您想使用 Selectize,最好创建一个包装器(即指令,如我的示例所示),为需要它的 select
个元素提供初始化。
此外,不要忘记,由于 Selectize 会导致 AngularJS 上下文之外的数据更改,您需要手动触发摘要(即 scope.$apply()
)以确保 [=31] 中的代码=]查看最新数据。
angular
.module('app', [])
.controller('ctrl', function ($scope) {
$scope.items = [
{ storedArray: ['078...'] },
{ storedArray: [] },
{ storedArray: ['0cc...'] },
];
$scope.skills = [
{ skillId: '078...', skillName: 'Java' },
{ skillId: '0cc...', skillName: 'Cisco UCS' },
];
$scope.itemSelectizeOptions = $scope.items.map(function (item) {
return {
valueField: 'skillId',
labelField: 'skillName',
options: $scope.skills,
items: item.storedArray,
onChange: function (newItems) {
item.storedArray = newItems;
// `$apply()` needed because change occurs outside of AngularJS's knowledge
$scope.$apply();
}
};
})
})
.directive('selectize', function () {
return {
scope: {
selectize: '<',
},
link: function (scope, el) {
var selectize = $(el).selectize(scope.selectize);
},
};
});
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/css/selectize.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.2/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/js/standalone/selectize.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<div ng-repeat="options in itemSelectizeOptions">
<select
multiple
selectize="options"></select>
</div>
<pre>{{ items | json }}</pre>
</div>
通过这个例子(JS Bin of pure html select tag)我可以实现纯粹的htmlselect倍数。
但我正在使用 selectize 插件
https://selectize.github.io/selectize.js/
对于下拉菜单 multi-select,我很困惑如何填充已经 selected 的值。?
这是我试过的 我的 HTML:
<div ng-repeat="item in items">
<select
multiple
class="selectSkill"
ng-model="item.storedArray"
ng-options="opt.skillId as opt.skillName for opt in skills"
></select>
</div>
我的客户:
$scope.$selectSkill= $('.selectSkill').selectize({
valueField: 'skillId',
labelField: 'skillName',
searchField: 'skillName',
maxItems: 5,
placeholder:"Select Skill",
options: $scope.skills,
create: false,
sortField: {
field: 'skillName',
direction: 'asc'
}
});
$scope.selectizeControlSkills = $scope.$selectSkill[0].selectize;
我正在加载 selectize with class-based(selectSkill
).
没有 populate 正常负载工作,但我正在尝试使用 selectize 动态设置值。
感谢您的帮助。
我的演示数据:
**$scope.skills**
**item.storedArray**
张贴我创建的示例作为答案,因为它似乎对 OP 有所帮助。
这里的建议是不要将 Selectize 与 ng-model
和 ng-options
混合使用,因为如果应用于相同的 select
元素,它们在功能上会相互冲突。
如果您想使用 Selectize,最好创建一个包装器(即指令,如我的示例所示),为需要它的 select
个元素提供初始化。
此外,不要忘记,由于 Selectize 会导致 AngularJS 上下文之外的数据更改,您需要手动触发摘要(即 scope.$apply()
)以确保 [=31] 中的代码=]查看最新数据。
angular
.module('app', [])
.controller('ctrl', function ($scope) {
$scope.items = [
{ storedArray: ['078...'] },
{ storedArray: [] },
{ storedArray: ['0cc...'] },
];
$scope.skills = [
{ skillId: '078...', skillName: 'Java' },
{ skillId: '0cc...', skillName: 'Cisco UCS' },
];
$scope.itemSelectizeOptions = $scope.items.map(function (item) {
return {
valueField: 'skillId',
labelField: 'skillName',
options: $scope.skills,
items: item.storedArray,
onChange: function (newItems) {
item.storedArray = newItems;
// `$apply()` needed because change occurs outside of AngularJS's knowledge
$scope.$apply();
}
};
})
})
.directive('selectize', function () {
return {
scope: {
selectize: '<',
},
link: function (scope, el) {
var selectize = $(el).selectize(scope.selectize);
},
};
});
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/css/selectize.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.2/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/js/standalone/selectize.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<div ng-repeat="options in itemSelectizeOptions">
<select
multiple
selectize="options"></select>
</div>
<pre>{{ items | json }}</pre>
</div>