Angular 具有隔离范围的指令的多个实例的范围问题
Scope issues with multiple instances of Angular Directives with isolate scope
我正在尝试创建一个 table 指令,它允许创建 table 具有添加、删除和编辑选项。
HTML
// User table
<atable config="userTable"></atable>
// Age table
<atable config="ageTable"></atable>
JS(控制器)
var userData = [{
un: 'user1',
pwd: 'password',
ph: '500000000',
id: 2
},..];
$scope.userTable = {
cols: ['Username', 'Password', 'Contact'],
rows: userData,
deleteRow: true,
deleteHandler: function (id) {
console.log(id);
for (var i = 0; i < userData.length; i++) {
if (userData[i].id == id) {
userData.splice(i, 1);
break;
}
}
},..
};
同样,我为第二个 table 创建了 ageData 和 ageTable 配置。
JS(指令)
.directive("atable", function () {
return {
restrict: "E",
scope: {
config: '='
},
template: 'Look at fiddle'
controller: function ($scope) {
$scope.deleteRow = function (row) {
$scope.config.currEditRow = angular.copy(row);
}
...
}
}
})
这里是 Fiddle.
删除行适用于第一个 table 但不适用于第二个实例。我认为在尝试删除 ageTable 中的某些内容时正在调用 userTable 的 deleteHandler。我猜这是范围界定问题,但无法弄清楚。
我认为问题在于您的模板包含模态定义,并且两者使用相同的 ID。所以第二个 table 中的删除按钮实际上显示了第一个 table.
的删除对话框(ID 'delPane')
查看 javascript 中用于显示模态的服务,例如 https://angular-ui.github.io/bootstrap/(请参阅模态部分)。
我正在尝试创建一个 table 指令,它允许创建 table 具有添加、删除和编辑选项。
HTML
// User table
<atable config="userTable"></atable>
// Age table
<atable config="ageTable"></atable>
JS(控制器)
var userData = [{
un: 'user1',
pwd: 'password',
ph: '500000000',
id: 2
},..];
$scope.userTable = {
cols: ['Username', 'Password', 'Contact'],
rows: userData,
deleteRow: true,
deleteHandler: function (id) {
console.log(id);
for (var i = 0; i < userData.length; i++) {
if (userData[i].id == id) {
userData.splice(i, 1);
break;
}
}
},..
};
同样,我为第二个 table 创建了 ageData 和 ageTable 配置。
JS(指令)
.directive("atable", function () {
return {
restrict: "E",
scope: {
config: '='
},
template: 'Look at fiddle'
controller: function ($scope) {
$scope.deleteRow = function (row) {
$scope.config.currEditRow = angular.copy(row);
}
...
}
}
})
这里是 Fiddle.
删除行适用于第一个 table 但不适用于第二个实例。我认为在尝试删除 ageTable 中的某些内容时正在调用 userTable 的 deleteHandler。我猜这是范围界定问题,但无法弄清楚。
我认为问题在于您的模板包含模态定义,并且两者使用相同的 ID。所以第二个 table 中的删除按钮实际上显示了第一个 table.
的删除对话框(ID 'delPane')查看 javascript 中用于显示模态的服务,例如 https://angular-ui.github.io/bootstrap/(请参阅模态部分)。