迁移到最新角度后,我的指令出现问题。

.directive('documentGrid',
    function() {
        return{
            restrict: 'EA',
            scope: {
                documentData: '=',
                remove: '&',
                edit: '&',
                documentDatasources: '='
            },
            controller: 'DocumentCrtl',
            controllerAs: 'vmDocument',
            //bindToController: true,
            //transclude: true,
            templateUrl: '/Custom/Document/document.cshtml'
        };
    });

<div class="box" document-grid document-data="widget"
                             document-datasources="vm.datasource.data"
                             remove="vm.remove(item)"
                             edit="vm.openSettings(item,datasources)">
                        </div>


在移动到最新版本之前,将绑定控制器设置为true可以正常工作,但现在不起作用。所以我删除bindToController:true,我需要使用$ scope从html指令访问我的可变绑定

我阅读了有关指令的指南,文章和教程,但找不到任何解决方案。

最佳答案

尝试替换为:

directive('documentGrid',
    function() {
        return{
            restrict: 'EA',
            bindToController: {
                documentData: '=',
                remove: '&',
                edit: '&',
                documentDatasources: '='
            },
            controller: 'DocumentCrtl',
            controllerAs: 'vmDocument',
            scope: {},
            //transclude: true,
            templateUrl: '/Custom/Document/document.cshtml'
        };
    });


请注意,我更改了bindToControllerscope

然后,在控制器中,您必须绑定this,例如:var vm = this;最好在控制器的第一行。

最终,您将能够像下面这样访问控制器中的数据:

vm.documentData


看到这个小提琴:https://jsfiddle.net/2n5skwqj/794/
在控制器功能中,我记录了名称。

09-25 17:55