离子 V1 等待弹出窗口

时间:2021-01-26 22:21:18

标签: ionic-framework ionic2 ionic3 ionic4

我正在打开一个弹出窗口,我想单击“Continuar”(在函数“quantDeProdutoPopup”中)以显示另外两个弹出窗口,但以下代码将等待弹出操作。我试图在函数中放入“await”和“async”,但没有用。有人知道怎么解决,我的代码如下:

这是我工作的公司的一个项目,在IONIC 1中,我不太了解技术。我试图在其他论坛上找到它,但没有得到答案。

$scope.quantDeProdutoPopup = $ionicPopup.show({
            templateUrl: 'templates/popups/quantidade-de-produto.html',
            cssClass: 'composicao-popup',
            title: 'Informe a quantidade',
            scope: $scope,
            buttons: [{
                text: 'Cancelar',
                type: 'button-energized',
                onTap: function (e) {
                    e.stopPropagation();
                    if (visualizandoNaComanda && !verificarQuantidadeDeAcompanhamentos()) {
                        e.preventDefault();
                        return;
                    }
                }
            }, {
                text: '<b>Confirmar</b>',
                type: 'button-positive',
                onTap: async function (e) {

                    if ($scope.temSabores) {
                        await $scope.openModalComposicao('sabores')
                    }
                    if ($scope.temAdicionais) {
                        await $scope.openModalComposicao('adicionais')
                    }

                    e.stopPropagation();

                    var strRemovidos = [];
                    var strAdicionais = [];
                    var strSabores = [];

                    angular.forEach($scope.produto.composicoes, function (i, k) {

                        if ($scope.produto.removidos && $scope.produto.removidos.indexOf(i.id) >= 0) {
                            strRemovidos.push(i.descricao);
                        } else if ($scope.produto.adicionais && $scope.produto.adicionais.indexOf(i.id) >= 0) {
                            if ($scope.produto.quantidadeAcompanhamentos > 0 && k <= $scope.produto.quantidadeAcompanhamentos) {
                                strAdicionais.push(i.descricao);
                            } else {
                                var valor = $filter("currency")(i.valor, "R$ ", 2);
                                strAdicionais.push(i.descricao + " <span class='to-upper'>(" + valor + ")</span>");
                            }
                        }
                        else if ($scope.produto.sabores && $scope.produto.sabores.indexOf(i.id) >= 0) {
                            var valor = $filter("currency")(i.valor, "R$ ", 2);
                            strSabores.push(i.descricao + " <span class='to-upper'>(" + valor + ")</span>");
                        }
                    });

                    $scope.produto.strRemovidos = strRemovidos.join(", ");
                    $scope.produto.strAdicionais = strAdicionais.join(", ");
                    $scope.produto.strSabores = strSabores.join(", ");

                    if ($scope.quant_do_produto == 0) {
                        e.preventDefault();
                        notify.alert("Opps", "Por favor, informe a quantidade.");
                        return;
                    }

                    if (!verificarQuantidadeDeAcompanhamentos()) {
                        e.preventDefault();
                        return;
                    }

                    $scope.produto.quant = $scope.quant_do_produto;

                    if (!$scope.ehCombo) {
                        if (!visualizandoNaComanda) {
                            ComandaService.addProduto($scope.produto);
                            notify.show("Produto adicionado com sucesso!", 800, "ion-checkmark-circled balanced");
                            $scope.$root.$broadcast("evProdutoAdicionado");

                        } else {
                            $log.debug("produto n eh combo e apenas editado");
                            $log.debug($scope.produto);
                        }
                    }
                    else {
                        ComandaService.calculaVlTotalCombo();
                    }

                    if (usandoSimilarEscolhido) {
                        var combo = ComandaService.getComboSelecionado();
                        $scope.produto.similares = true;
                        combo.composicoes[combo.composicaoSimilarIdx] = $scope.produto;
                    }


                    $scope.$root.$broadcast("produtoFoiEditado");

                    //                    else if($scope.ehCombo){
                    //                        var combo = ComandaService.getComboSelecionado();
                    //                        if(combo.composicaoSimilarIdx)
                    //                            combo.composicoes.
                    //                    }

                    $scope.$destroy();

                }

            }]
        });

        $scope.openModalComposicao = async function (tipo) {

            $scope.filterComposicao = "";
            $scope.mostrarValoresDeAdicionais = $scope.produto.quantidadeAcompanhamentos > 0 ? false : true;
            $scope.composicoesSelecionadas = {};
            $scope.limitesPorSabores = [];

            $scope.validarComposicao = function (key) {
                if ($scope.produto.quantidadeAcompanhamentos > 0) {
                    if (tipo == "sabores") {
                        var limite = 0;
                        angular.forEach($scope.composicoesSelecionadas.sabores[key], function (c) {
                            if (c.checked == true)
                                limite++;
                        });

                        if (limite >= $scope.produto.quantidadeAcompanhamentos) {
                            notify.alert("Atenção!", "Quantidade limite de sabores atingido.");
                            $scope.limitesPorSabores[key] = true;
                        }
                        else
                            $scope.limitesPorSabores[key] = false;
                    }

                } else if (key != "Geral") {
                    var limite = 0;
                    angular.forEach($scope.composicoesSelecionadas.sabores[key], function (c) {
                        if (c.checked == true)
                            limite++;

                        if (c.quantidadeSabores == limite)
                            $scope.limitesPorSabores[key] = true;
                        else
                            $scope.limitesPorSabores[key] = false;

                    });
                }
            };

            $scope.tipoComposicao = tipo;
            var composicoesTemp = angular.copy($scope.produto.composicoes);

            if (tipo == "ingredientes") {
                var title = "INGREDIENTES";
                $scope.composicoesSelecionadas[tipo] = [];
                var olistaTemp = [];
                angular.forEach(composicoesTemp, function (v, i) {
                    if (v.tipo == 1) {

                        if ($scope.produto.removidos) {

                            angular.forEach($scope.produto.removidos, function (pRem) {
                                if (pRem == v.id)
                                    v.checked = true;
                            });
                        }

                        //$scope.composicoesSelecionadas[tipo].push(v);
                        olistaTemp.push(v);
                    }
                });
                $scope.composicoesSelecionadas[tipo] = olistaTemp.groupBy("codigoGrupo");
            } else if (tipo == "adicionais") {
                var title = "ADICIONAIS";
                $scope.composicoesSelecionadas[tipo] = [];
                var olistaTemp = [];
                angular.forEach(composicoesTemp, function (v, i) {
                    if (v.tipo == 2) {

                        if ($scope.produto.adicionais) {

                            angular.forEach($scope.produto.adicionais, function (pRem) {
                                if (pRem == v.id)
                                    v.checked = true;
                            });
                        }

                        //$scope.composicoesSelecionadas[tipo].push(v);
                        olistaTemp.push(v);
                    }
                });
                $scope.composicoesSelecionadas[tipo] = olistaTemp.groupBy("codigoGrupo");
            }
            else if (tipo == "sabores") {
                var title = "SABORES";
                $scope.composicoesSelecionadas[tipo] = [];
                var olistaTemp = [];
                angular.forEach(composicoesTemp, function (v, i) {
                    if (v.tipo == 4) {
                        if ($scope.produto.sabores) {
                            angular.forEach($scope.produto.sabores, function (pRem) {
                                if (pRem == v.id)
                                    v.checked = true;
                            });
                        }
                        //$scope.composicoesSelecionadas[tipo].push(v);
                        olistaTemp.push(v);
                    }
                });

                $scope.composicoesSelecionadas[tipo] = olistaTemp.groupBy("codigoGrupo");

                angular.forEach($scope.composicoesSelecionadas[tipo], function (produtos, key) {
                    $scope.validarComposicao(key);
                });
            }

            $scope.showPopupList = false;
            var popupDynamicH = "auto";
            $scope.popupLoaded = function () {

                $timeout(function () {

                    $scope.showPopupList = true;
                    //                    $scope.$apply();

                }, 100);

            };

            setTimeout(function () {
                $scope.popupComposicoesOpened = true;
            }, 300);

            var composicaoPopup = $ionicPopup.show({
                templateUrl: 'templates/popups/composicoes.html',
                cssClass: 'composicao-popup',
                title: title,
                scope: $scope,
                buttons: [{
                    text: 'Cancelar',
                    type: 'button-energized',
                    onTap: function (e) {
                        e.stopPropagation();
                        $scope.composicoesSelecionadas = {};
                        setTimeout(function () {
                            $scope.popupComposicoesOpened = false;
                            $scope.$apply();
                        }, 800);
                    }
                }, {
                    text: '<b>Confirmar</b>',
                    type: 'button-positive',
                    onTap: async function (e) {

                        e.stopPropagation();


                        if ($scope.tipoComposicao == "ingredientes") {

                            $scope.produto.removidos = [];

                            angular.forEach($scope.composicoesSelecionadas[$scope.tipoComposicao], function (olista, i) {
                                angular.forEach(olista, function (v, i) {
                                    if (v.tipo == 1 && v.checked == true)
                                        $scope.produto.removidos.push(v.id);
                                });
                            });

                        } else if ($scope.tipoComposicao == "adicionais") {

                            $scope.produto.adicionais = [];

                            angular.forEach($scope.composicoesSelecionadas[$scope.tipoComposicao], function (olista, i) {
                                angular.forEach(olista, function (v, i) {
                                    if (v.tipo == 2 && v.checked == true)
                                        $scope.produto.adicionais.push(v.id);
                                });
                            });

                            if ($scope.limiteDeAdicionais > 0 && $scope.produto.adicionais.length <= 0) {
                                e.preventDefault();
                                notify.alert("Opss", "Por favor, informe pelo menos 1 item/sabor para o prato.");
                                return;
                            }
                        }
                        else if ($scope.tipoComposicao == "sabores") {

                            $scope.produto.sabores = [];

                            angular.forEach($scope.composicoesSelecionadas[$scope.tipoComposicao], function (olista, i) {
                                angular.forEach(olista, function (v, i) {
                                    if (v.tipo == 4 && v.checked == true)
                                        $scope.produto.sabores.push(v.id);
                                });
                            });
                        }

                        $scope.composicoesSelecionadas = {};
                        setTimeout(function () {
                            $scope.popupComposicoesOpened = false;
                            $scope.$apply();
                        }, 800);


                        //return $scope.produto;
                        return true
                    }

                }]
            });

            //            $timeout(function () {
            //                _ionicScrollDelegate = $ionicScrollDelegate;
            //                $ionicScrollDelegate.$getByHandle('composicoes-delegate').resize();
            //            }, 1000);


        };

0 个答案:

没有答案