从父控制器 AngularjS 访问 Popup 控件

Access Popup controls from parent controller AngularjS

本文关键字:Popup 控件 访问 AngularjS 控制器      更新时间:2023-09-26

在我的主页(Index.html)上,单击特定图标时,我正在通过调用相应的控制器方法打开一个uibmodal (bootstrap)弹出窗口。弹出窗口打开得很好。之后,无法从父控制器捕获弹出控件的按钮单击事件(同意,不同意)。

控制器.js:

function CameraController($scope,$uibModal) {
        var vm = this;
        vm.captureScreenShot = captureScreenShot;
        vm.openCameraAgreement = openCameraAgreement;

        /* Opens the agreement before capturing the screen shot */
        function openCameraAgreement() {
            //open the agreement
            var instance = $uibModal.open({
                animation: true,
                templateUrl: 'app/components/capture/cameraAgreement.html',
                controller: CameraController,
                controllerAs: 'vm',
                size: 'sm-2'
            });
            vm.cancel = function () {
                instance.close();
            };
            vm.agree = function () {
                instance.close();
                captureScreenShot() //call this method to do something
            };
        }
        function captureScreenShot($event) {
            //do something to capture the screen shot
        }
}

索引.html:

<li ng-controller="CameraController as camera">
<a ng-click="camera.openCameraAgreement()">
</a>
</li>

相机协议.html

<a class="btn btn-primary saveCamera" ng-click="vm.agree()">Agree</a>
<a class="btn btn-primary" ng-click="vm.cancel()">Disagree</a>

基本上,我想知道用户是否在弹出窗口中单击了同意或不同意,以便。基于vm.agree() 和 vm.cancel() 没有被调用,也没有错误。我在范围或控制器引用方面做错了什么吗?请帮忙!

尝试将 CammeraController $scope添加到模态实例,并将函数绑定到$scope,如下所示:

var instance = $uibModal.open({
            animation: true,
            templateUrl: 'app/components/capture/cameraAgreement.html',
            controller: CameraController,
            controllerAs: 'vm',
            size: 'sm-2',
 //Add the parent scope
            scope: $scope
        });
        $scope.cancel = function() { ... }

编辑:是的,这种情况是您使用两个不同的控制器注册同一个控制器As属性,因此角度可能会在内部抛出错误,但并非每个错误都会显示在控制台上。我认为你能做的是你可以:1) 为模态创建一个新的控制器(函数),并将函数移动到模态内2) 使用 bindToController 将功能从相机控制器传递到模态控制器。