Angularjs 如何引用应用指令的$scope?
我有一个自定义指令,它将文件上传到amazon,并包含一个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="
回调(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作用域:{}
。本例中的指令使用私有范围。尝试删除它好的一点(已更新),尽管这并不能真正回答我的问题。你能发布控制器的相关部分吗?为什么要使用隔离作用域akascope:{}
。本例中的指令使用私有范围。尝试删除它好的一点(更新),虽然这并不能真正回答我的问题。你能发布你控制器的相关部分吗?对于选项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)代码>行?是的,但是,我希望它在父范围内:)