我写了一个指令,我需要通过名称动态注入控制器,如下面的代码:
但是我发现外部注入的真实控制器改变了原点控制器的子控制器。
angular.module('bsTable', []).directive('bsTable', function ($compile) {
return {
restrict: 'EA',
scope: {
bsTable: '='
},
replace: true,
controller: "@",
name: "controllerName",
link: function (scope, el, attr, ctl) {
scope.instantiated = false;
scope.$watch('bsTable.options', function (value) {
if (!value) {
return;
}
if (scope.instantiated) {
$(el).bootstrapTable('destroy');
}
$(el).bootstrapTable(angular.copy(value));
$(el).bind('post-body.bs.table', function () {
var body = el.find('tbody')[0];
$compile(body)(scope);
$(window).resize(function () {
$(el).bootstrapTable('resetView');
});
});
scope.instantiated = true;
}, true);
scope.$on('table-refresh', function () {
$(el).bootstrapTable('refresh');
});
}
};
})
整个代码在上面。 这个指令的用法如下:
<div class="col-lg-12">
<table bs-table="bsTable" controller-name="searchDiscountController"></table>
</div>
在使用该指令之前,searchDiscountController实例的id是3,而searchDiscountController下的html模型可以正确绑定。
使用该指令后,我发现原始searchDiscountController实例的id更改为4,而指令中作用域的id也是4。
但是searchDiscountController下的html模型正在一个id为3的控制器实例中工作。
因此,当我得到ng-model的值时,我需要访问 $ parent 来获取值...
我很困惑......