angular directive:动态注入控制器更改原点控制器

时间:2015-10-08 03:01:37

标签: angularjs dynamic controller directive

我写了一个指令,我需要通过名称动态注入控制器,如下面的代码:

但是我发现外部注入的真实控制器改变了原点控制器的子控制器。

那么如何按名称注入控制器而不是在外面更改原点控制器?

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 来获取值...

我很困惑......

0 个答案:

没有答案