Я проверил все другие сообщения и поверьте мне, это не дубликат. Надеюсь, кто-нибудь может мне помочь. Вот код.
HTML-код. Когда пользователь нажимает кнопку «Отчет», выполняется сборка buildData. Название параметра multiselect - mu-ls.
<button ng-click="buildData(selected_items)">Report</button>
<div>Universe:</div>
<div><mu-ls pre-selected="member.roles" model="selected_items" options="roles"></muls></div>
Директива Code- Название директивы - muLs. Пользователь может выбрать несколько опций, используя эту директиву. $ Scope.model дает массив идентификаторов, выбранных пользователем.
angular.module('Select').directive('muLs', function() {
return {
restrict: 'E',
scope: {
model: '=',
options: '=',
pre_selected: '=preSelected'
},
template: "<div data-ng-class='{open: open}'>" +
"<button data-ng-click='open=!open;openDropdown()'>Select...</button>" +
"<ul aria-labelledby='dropdownMenu'>" +
"<li data-ng-repeat='option in options'> <a data-ng-click='setSelectedItem()'>{{option.name}}<span data-ng-class='isChecked(option.id)'></span></a></li>" +
"</ul>" +
"</div>",
controller: function ($scope) {
$scope.openDropdown = function() {
$scope.selected_items = [];
for (var i = 0; i < $scope.pre_selected.length; i++) {
$scope.selected_items.push($scope.pre_selected[i].id);
}
};
$scope.setSelectedItem = function() {
var id = this.option.id;
if (_.contains($scope.model, id)) {
$scope.model = _.without($scope.model, id);
} else {
$scope.model.push(id);
}
console.log($scope.model);
return false;
};
$scope.isChecked = function (id) {
if (_.contains($scope.model, id)) {
return 'glyphicon glyphicon-ok pull-right';
}
return false;
};
}
}
});
Код контроллера. В этом случае должен отображаться список выбранных элементов, перечисленных выше на стороне контроллера. На данный момент это показывается неопределенным.
'use strict'
var Modd= angular.module('Select', []);
Modd.controller('SelectController', function ($scope, $timeout, $rootScope) {
$scope.roles = [
{ "id": 1, "name": "USA" },
{ "id": 2, "name": "France" },
{ "id": 3, "name": "Russia" }
];
$scope.member = { roles: [] };
$scope.selected_items = [];
$scope.buildData = function (selected_items) {
console.log("This is", $scope.model);
}
});
QUESTION- Как я могу использовать это директивное значение $ scope.model на стороне контроллера ??? Пожалуйста, предложите ребятам !!!
Сначала я попробовал $ scope.selected_items. Он отображает список выбранных элементов только один раз. Как только я нажму кнопку «Сообщить», он предоставит список. Если я снова начну нажимать и отменять выбор элементов списка, он все равно будет показывать предыдущие значения. а не текущие.
$ scope.model продолжает показывать последние выбранные значения.
@ DenimChicken- обновил мой вопрос, основываясь на том, что вы упомянули. – Ayesha
@Ayesha это решение работает отлично для меня. Вот скрипка, чтобы показать вам: https://jsfiddle.net/9f9kud3n/ – DenimChicken
@ DenimChicken - это сводит меня с ума. Я не знаю, почему я не получаю аналогичную продукцию. это имеет значение, когда у меня есть директива, контроллер и храм отдельно. tats wat, о котором я могу думать прямо сейчас. сделал u изменить код отдельно от упоминания $ scope.selected_items> ?? – Ayesha