目標: コンポーネントを使用し、$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);
}
});
}