使用 controller as 和 vm 在 AngularJS 中传递模态数据

Passing modal data in AngularJS using controller as and vm

我有一对看起来像这样的控制器:

(function () {
    'use strict';

    angular
        .module('room')
        .controller('RoomGetCtrl', Room)
        .controller('TestCtrl', Test)

    Room.$inject = [...'$uibModal'...];
    Test.$inject = [...'$uibModalInstance'...];

    function Room(..., $scope, $uibModal) {
        var vm = this;

        ... 

        vm.open = function (size) {

            vm.modalInstance = $uibModal.open({
                templateUrl: 'modal.html',
                controller: 'TestCtrl as vm',
            });
        };
    }

    function Test(???){
        this.modalText = 'Modal Text'
        this.modalCancel = function() {
            ???.dismiss();
        }
    }
})();

视图如下所示:

<script type="text/ng-template" id="modal.html">
    <div class="modal-header">
        <h3 class="modal-title">Modal window</h3>
    </div>
    <div class="modal-body">
        <pre>{{ vm.modalText }}</pre>
    </div>
    <div class="modal-footer">
        <button class="btn btn-default" ng-click="vm.modalCancel()">Cancel</button>
    </div>
</script>

<button type="button" class="btn btn-default" ng-click="vm.open()">Open me!</button>
...

上面的工作,除了我无法弄清楚上面 Test() 中的 ??? 中的内容。我尝试了各种方法,每当我单击取消按钮时,控制台都会根据 "x.dismiss is not a function," 行记录错误,其中 "x" 是我尝试使用的任何内容。

有什么帮助吗?

没关系。我立即自己解决了(我发誓,发布问题让我思考得更好)。无论如何,这里:

(function () {
    'use strict';

    angular
        .module('room')
        .controller('RoomGetCtrl', Room)
        .controller('TestCtrl', Test)

    Room.$inject = [...,'$uibModal'];
    Test.$inject = [$uibModalInstance];

    function Room(..., $uibModal) {
        /*jshint validthis: true */
        var vm = this;

        ...

        vm.open = function () {

            vm.modalInstance = $uibModal.open({
                templateUrl: 'modal.html',
                controller: 'TestCtrl as vm',
            });
        };
    }

    function Test($uibModalInstance){
        this.modalText = 'Modal Text'
        this.modalCancel = function() {
            $uibModalInstance.dismiss();
        }
    }
})();

真的很简单。 $uibModalInstance.dismiss();。它就在 documentation

感叹