目标:使用组件而不是使用 $scope 来设置数据。没有要共享的错误,问题是对话框加载组件时未设置数据元素。屏幕截图显示了对话框的当前状态,标签#2(信息)中应该有一个对象绑定。我可以使用 onComplete 事件在对话框加载后验证对象(文档)是否可用。我尝试通过以下方式将对话框调用可用的数据绑定到组件:
1 使用当地人:
locals: {
document: document
},
bindToController: true,
onComplete: function(){
console.log('document: %O', document);
}
2 使用绑定:
bindings: {
document: '='
}
3 使用解析:
resolve: {
document: function() {
return document;
}
}
组件:
我相信错误就在这里,绑定,“旧方式”使用 $scope vars 所以绑定毫不费力地连接起来。
(function(){
'use strict';
angular.module('adminClientApp')
.component('documentEdit', {
templateUrl: 'js/app/components/document/documentEdit/document-edit.html',
controller: function DocumentEditController($mdToast, $mdMedia) {
var var documentEdit = this;
documentEdit.document;
},
bindings: {
document: '<'
}
});
})();
对话调用
DialogController 中只有 $mdDialog 事件。我意识到 locals 和 bindToController 的目标是对话框(DialogController)中指定的控制器。我被难住了——如何将文档设置/传递/连接到组件控制器?
this.showEdit = function ($event, document) {
var parentEl = angular.element(document.body);
$mdDialog.show({
parent: parentEl,
targetEvent: $event,
template: '<div><document-edit document="documentEdit.document"></document-edit></div>',
resolve: {
document: function(){ return document;}
},
controller: DialogController,
onComplete: function(){
console.log('document: %O', document);
}
});
}