将 $scope.model 从指令传递给控制器 (Angularjs)
Pass $scope.model from directive to controller (Angularjs)
我已经检查了所有其他帖子并相信我,这不是重复的。希望可以有人帮帮我。这是代码。
HTML 代码 - 当用户点击 Report 时,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>
指令代码-指令名称是muLs。用户可以使用此指令 select 多个选项。 $scope.model 给出用户 select 编辑的 ID 数组。
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;
};
}
}
});
控制器代码- 这应该显示上面在控制器端列出的 selected 项目的列表。目前显示未定义。
'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);
}
});
问题- 我如何在控制器端使用这个指令值 $scope.model???请大家推荐!!!
我先尝试了$scope.selected_items。它只给出一次 selected 项目列表。一旦我点击报告按钮,它就会给出列表。如果我再次开始单击并取消 selecting 列表项,它仍会显示以前的值。不是现在的。
$scope.model 继续显示最新值 selected。
model
是双向绑定。因此,如果您将控制器中的 $scope
变量分配给模块属性,它将在所选值更改时更新。
因此你可以console.log($scope.selected_items);
您正在将 selected_items
传递给您的指令,因此它将在您的控制器中包含 model
的值。
$scope.buildData = function () {
console.log("This is", $scope.selected_items);
}
我已经检查了所有其他帖子并相信我,这不是重复的。希望可以有人帮帮我。这是代码。
HTML 代码 - 当用户点击 Report 时,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>
指令代码-指令名称是muLs。用户可以使用此指令 select 多个选项。 $scope.model 给出用户 select 编辑的 ID 数组。
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;
};
}
}
});
控制器代码- 这应该显示上面在控制器端列出的 selected 项目的列表。目前显示未定义。
'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);
}
});
问题- 我如何在控制器端使用这个指令值 $scope.model???请大家推荐!!!
我先尝试了$scope.selected_items。它只给出一次 selected 项目列表。一旦我点击报告按钮,它就会给出列表。如果我再次开始单击并取消 selecting 列表项,它仍会显示以前的值。不是现在的。
$scope.model 继续显示最新值 selected。
model
是双向绑定。因此,如果您将控制器中的 $scope
变量分配给模块属性,它将在所选值更改时更新。
因此你可以console.log($scope.selected_items);
您正在将 selected_items
传递给您的指令,因此它将在您的控制器中包含 model
的值。
$scope.buildData = function () {
console.log("This is", $scope.selected_items);
}