Angularjs 如何引用应用指令的$scope?

Angularjs 如何引用应用指令的$scope?,angularjs,fine-uploader,Angularjs,Fine Uploader,我有一个自定义指令,它将文件上传到amazon,并包含一个回调(onComplete)。 回调完成后,我想在创建指令的控制器的$scope上附加一个值。在本例中,Invite的作用域 Invite和fineUploader都扩展了相同的角度模块 HTML(简化): <div ng-controller="Invite" class="apply"> <div fine-uploader ng-switch-when="file" upload-extensions="

我有一个自定义指令,它将文件上传到amazon,并包含一个
回调(onComplete)
。 回调完成后,我想在创建指令的控制器的
$scope
上附加一个值。在本例中,
Invite
的作用域

Invite
fineUploader
都扩展了相同的角度模块

HTML(简化):

<div ng-controller="Invite" class="apply">
    <div fine-uploader ng-switch-when="file"  upload-extensions="jpg,jpeg,png,gif"></div>
</div>
directive('fineUploader', function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        link: function($scope, element, attributes, ngModel) {
            $scope.uploader = new qq.s3.FineUploader({
                debug: true,
                element: element[0],
                request: {
                    endpoint: 'ballentines-bar-project.s3.amazonaws.com',
                    accessKey: 'AKIAIPT6J4T6XZXV3VWA'
                },callbacks: {
                    onComplete: function(id, fileName, responseJSON) {
                        if (responseJSON.success === true) {
                            console.log(this.getKey(id));
                            console.log($scope);
                            $scope.test = this.getKey(id);
                        }
                    }
                },
                signature: {
                    endpoint: '/s3/'
                },
                iframeSupport: {
                    localBlankPagePath: '/success.html'
                },
                retry: {
                    enableAuto: true // defaults to false
                },
                deleteFile: {
                    enabled: false
                },
                text: {
                    uploadButton: '<p>Upload File</p>'
                },
                template:
                    '<div class="qq-uploader">' +
                        '<div class="qq-upload-button btn btn-info">{uploadButtonText}</div>' +
                        '<ul class="qq-upload-list" ><h2>Your files</h2></ul>' +
                    '</div>',
            });
        }
    };
}).
scope: { directiveProperty: '=nameOfAttributeThatContainsParentProperty' },

我会尝试至少两种选择:

[1]

将指令中的
范围:{},
更改为:

   `scope: { test: '@'},`
这使得
test
方法在私有范围中可见

[2]


第二个选项尝试删除隔离作用域a.e:
作用域:{},

我将尝试至少两个选项:

[1]

将指令中的
范围:{},
更改为:

   `scope: { test: '@'},`
这使得
test
方法在私有范围中可见

[2]


第二个选项尝试删除隔离作用域a.e:
scope:{},

您需要将项从父作用域传递到指令(通过隔离作用域)。或者,按照@MaximShoustin所说的去做,并从指令中删除隔离的作用域

因此,选项1:

<div ng-controller="Invite" class="apply">
    <div fine-uploader ng-switch-when="file"  upload-extensions="jpg,jpeg,png,gif"></div>
</div>
directive('fineUploader', function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        link: function($scope, element, attributes, ngModel) {
            $scope.uploader = new qq.s3.FineUploader({
                debug: true,
                element: element[0],
                request: {
                    endpoint: 'ballentines-bar-project.s3.amazonaws.com',
                    accessKey: 'AKIAIPT6J4T6XZXV3VWA'
                },callbacks: {
                    onComplete: function(id, fileName, responseJSON) {
                        if (responseJSON.success === true) {
                            console.log(this.getKey(id));
                            console.log($scope);
                            $scope.test = this.getKey(id);
                        }
                    }
                },
                signature: {
                    endpoint: '/s3/'
                },
                iframeSupport: {
                    localBlankPagePath: '/success.html'
                },
                retry: {
                    enableAuto: true // defaults to false
                },
                deleteFile: {
                    enabled: false
                },
                text: {
                    uploadButton: '<p>Upload File</p>'
                },
                template:
                    '<div class="qq-uploader">' +
                        '<div class="qq-upload-button btn btn-info">{uploadButtonText}</div>' +
                        '<ul class="qq-upload-list" ><h2>Your files</h2></ul>' +
                    '</div>',
            });
        }
    };
}).
scope: { directiveProperty: '=nameOfAttributeThatContainsParentProperty' },
或者,选项2:

<div ng-controller="Invite" class="apply">
    <div fine-uploader ng-switch-when="file"  upload-extensions="jpg,jpeg,png,gif"></div>
</div>
directive('fineUploader', function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        link: function($scope, element, attributes, ngModel) {
            $scope.uploader = new qq.s3.FineUploader({
                debug: true,
                element: element[0],
                request: {
                    endpoint: 'ballentines-bar-project.s3.amazonaws.com',
                    accessKey: 'AKIAIPT6J4T6XZXV3VWA'
                },callbacks: {
                    onComplete: function(id, fileName, responseJSON) {
                        if (responseJSON.success === true) {
                            console.log(this.getKey(id));
                            console.log($scope);
                            $scope.test = this.getKey(id);
                        }
                    }
                },
                signature: {
                    endpoint: '/s3/'
                },
                iframeSupport: {
                    localBlankPagePath: '/success.html'
                },
                retry: {
                    enableAuto: true // defaults to false
                },
                deleteFile: {
                    enabled: false
                },
                text: {
                    uploadButton: '<p>Upload File</p>'
                },
                template:
                    '<div class="qq-uploader">' +
                        '<div class="qq-upload-button btn btn-info">{uploadButtonText}</div>' +
                        '<ul class="qq-upload-list" ><h2>Your files</h2></ul>' +
                    '</div>',
            });
        }
    };
}).
scope: { directiveProperty: '=nameOfAttributeThatContainsParentProperty' },

从指令中删除独立的作用域声明
scope:{},
。这将允许指令扩展其包含范围的范围

您需要将项从父范围传递到指令(通过隔离范围)。或者,按照@MaximShoustin所说的去做,并从指令中删除隔离的作用域

因此,选项1:

<div ng-controller="Invite" class="apply">
    <div fine-uploader ng-switch-when="file"  upload-extensions="jpg,jpeg,png,gif"></div>
</div>
directive('fineUploader', function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        link: function($scope, element, attributes, ngModel) {
            $scope.uploader = new qq.s3.FineUploader({
                debug: true,
                element: element[0],
                request: {
                    endpoint: 'ballentines-bar-project.s3.amazonaws.com',
                    accessKey: 'AKIAIPT6J4T6XZXV3VWA'
                },callbacks: {
                    onComplete: function(id, fileName, responseJSON) {
                        if (responseJSON.success === true) {
                            console.log(this.getKey(id));
                            console.log($scope);
                            $scope.test = this.getKey(id);
                        }
                    }
                },
                signature: {
                    endpoint: '/s3/'
                },
                iframeSupport: {
                    localBlankPagePath: '/success.html'
                },
                retry: {
                    enableAuto: true // defaults to false
                },
                deleteFile: {
                    enabled: false
                },
                text: {
                    uploadButton: '<p>Upload File</p>'
                },
                template:
                    '<div class="qq-uploader">' +
                        '<div class="qq-upload-button btn btn-info">{uploadButtonText}</div>' +
                        '<ul class="qq-upload-list" ><h2>Your files</h2></ul>' +
                    '</div>',
            });
        }
    };
}).
scope: { directiveProperty: '=nameOfAttributeThatContainsParentProperty' },
或者,选项2:

<div ng-controller="Invite" class="apply">
    <div fine-uploader ng-switch-when="file"  upload-extensions="jpg,jpeg,png,gif"></div>
</div>
directive('fineUploader', function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        link: function($scope, element, attributes, ngModel) {
            $scope.uploader = new qq.s3.FineUploader({
                debug: true,
                element: element[0],
                request: {
                    endpoint: 'ballentines-bar-project.s3.amazonaws.com',
                    accessKey: 'AKIAIPT6J4T6XZXV3VWA'
                },callbacks: {
                    onComplete: function(id, fileName, responseJSON) {
                        if (responseJSON.success === true) {
                            console.log(this.getKey(id));
                            console.log($scope);
                            $scope.test = this.getKey(id);
                        }
                    }
                },
                signature: {
                    endpoint: '/s3/'
                },
                iframeSupport: {
                    localBlankPagePath: '/success.html'
                },
                retry: {
                    enableAuto: true // defaults to false
                },
                deleteFile: {
                    enabled: false
                },
                text: {
                    uploadButton: '<p>Upload File</p>'
                },
                template:
                    '<div class="qq-uploader">' +
                        '<div class="qq-upload-button btn btn-info">{uploadButtonText}</div>' +
                        '<ul class="qq-upload-list" ><h2>Your files</h2></ul>' +
                    '</div>',
            });
        }
    };
}).
scope: { directiveProperty: '=nameOfAttributeThatContainsParentProperty' },

从指令中删除独立的作用域声明
scope:{},
。这将允许指令扩展其包含范围的范围

为什么要使用隔离作用域aka
作用域:{}
。本例中的指令使用私有范围。尝试删除它好的一点(已更新),尽管这并不能真正回答我的问题。你能发布控制器的相关部分吗?为什么要使用隔离作用域aka
scope:{}
。本例中的指令使用私有范围。尝试删除它好的一点(更新),虽然这并不能真正回答我的问题。你能发布你控制器的相关部分吗?对于选项2,那又怎样?我尝试了console.log($scope);它似乎仍然是错误的作用域。我要引用的作用域包含一个名为$localStorage的键(在Angular调试器中,我可以确定它是父作用域。)对于选项2,然后呢?我尝试了console.log($scope);它似乎仍然是错误的作用域。我要引用的作用域包含一个名为$localStorage的键(在Angular调试器中,我可以确定它是父作用域。)对于选项2,然后呢?我尝试了console.log($scope);似乎仍然是错误的作用域。是否使用调试器获得
$scope.test=this.getKey(id)行?是的,但是,我希望它在选项2的父范围内:),然后呢?我尝试了console.log($scope);似乎仍然是错误的作用域。是否使用调试器获得
$scope.test=this.getKey(id)行?是的,但是,我希望它在父范围内:)