モーダルを使用してテーブルからいくつかのデータを編集したいと思います。間違いなくTypedからのangular-ui-bootstrapのTypeScript定義にはさまざまなインターフェイスがありますが、それらは文書化されておらず、使用方法の例を見つけることができません。
私が達成したいのは次のようなものです:
データを交換するために、ItemsListControllerとItemDetailModalControllerの両方に同じスコープのインスタンスが必要であると想定するのは正しいですか?上記のインターフェイスを使用して、モーダルディレクティブのコントローラーとテンプレートを定義するにはどうすればよいですか?
私はすでにこの非TypeScriptの例をここで見つけました: https://angular-ui.github.io/bootstrap/#/modal
ただし、初心者として、サンプルが懸念事項を分離せずにすべてを1つのファイルにスローすると、何が起こっているのかを理解するのに苦労します。
angularによって注入されたインスタンスは、タイプng.ui.bootstrap.IModalService
になります。
また、「controller as」構文を使用しているため、ここで$scope
の使用を開始する必要はありません。代わりに、 angular-uiモーダルの例 に示すようにresolveを使用できます。
サンプルコードは次のとおりです。
class ItemsListController {
static controllerId = 'ItemsListController';
static $inject = ['$modal'];
data = [
{ value1: 'Item1Value1', value2: 'Item1Value2' },
{ value1: 'Item2Value1', value2: 'Item2Value2' }
];
constructor(private $modal: ng.ui.bootstrap.IModalService) { }
edit(item) {
var options: ng.ui.bootstrap.IModalSettings = {
templateUrl: 'modal.html',
controller: ItemDetailController.controllerId + ' as modal',
resolve: {
item: () => item // <- this will pass the same instance
// of the item displayed in the table to the modal
}
};
this.$modal.open(options).result
.then(updatedItem => this.save(updatedItem));
//.then(_ => this.save(item)); // <- this works the same way as the line above
}
save(item) {
console.log('saving', item);
}
}
class ItemDetailController {
static controllerId = 'ItemDetailController';
static $inject = ['$modalInstance', 'item'];
constructor(private $modalInstance: ng.ui.bootstrap.IModalServiceInstance, public item) { }
save() {
this.$modalInstance.close(this.item); // passing this item back
// is not necessary since it
// is the same instance of the
// item sent to the modal
}
cancel() {
this.$modalInstance.dismiss('cancel');
}
}
データを交換するために、ItemsListControllerとItemDetailModalControllerの両方に同じスコープのインスタンスが必要であると想定するのは正しいですか?
はい。私は実際、モーダルをItemsListController
を含むメンバーshownDetails:ItemDetailModalController
の拡張と考えています。つまり、$scope
を単一の$scope
として共有する面倒な方法を考え出す必要はありません。
上記のインターフェイスを使用して、モーダルディレクティブのコントローラーとテンプレートを定義するにはどうすればよいですか?
これは私が持っているものです(あなたがスコープを共有していることに注意してください):
this.$modal.open({
templateUrl: 'path/To/ItemModalDetails.html',
scope: this.$scope,
})
ここで、$modal:IModalService
はangularストラップが提供するものに対応します: http://angular-ui.github.io/bootstrap/#/modal