我如何防止在 angularJs 中显示引导弹出窗口

Posted

技术标签:

【中文标题】我如何防止在 angularJs 中显示引导弹出窗口【英文标题】:how can i prevent to show bootstrap popover sometime in angularJs 【发布时间】:2017-02-20 05:58:58 【问题描述】:

我在自定义 angularJs 指令中使用引导弹出框。当$scope.buytypeButton= type:false 按钮应禁用并在弹出窗口中显示错误消息时,我将显示错误消息。 但我希望$scope.buytypeButton= type:true 按钮应该处于活动状态并且不显示弹出窗口。

html

 <my-next-level id='pop' buytype-button='buytypeButton' 
popover-html='message' click-next='clickNext()'></my-next-level>

angularJs:

app.controller('MainCtrl', function($scope,$http) 
                $scope.message='error';
                $scope.buytypeButton= type:false;
;



 app.directive('myNextLevel', function () 
        return 
            restrict: 'EA',
            scope: buytypeButton:'=', popoverHtml:'@', clickNext:'&',
            template: '<a href="" tabindex="0" class="btn btn-block btn-success 
ng-class: disabled: !buytypeButton.type " role="button" data-ng-click="clickNext()" 
>next</a>',
                link: function (scope, el, attrs)
                    $(el).popover(
                        trigger: 'click',
                        html: true,
                        toggle:'popover',
                        title: 'notice!!',
                        content: scope.popoverHtml,
                        placement: 'top'
                    );
                    attrs.$observe('popoverHtml', function(val)
                        $(el).popover('hide');
                        var popover = $(el).data('bs.popover');
                        popover.options.content = val;
                    );
                
            ;
        );

回答

我使用此代码,它工作正常。

$(el).click(function() 
                   if(scope.buytypeButton.type == true)
                       $(el).popover('hide');
                   
                );

在我的指令中。

【问题讨论】:

plunker 会很棒! 【参考方案1】:

答案:

我使用此代码,它工作正常。

$(el).click(function() 
                   if(scope.buytypeButton.type == true)
                       $(el).popover('hide');
                   
                );

在我的指令中。

app.directive('myNextLevel', function () 
            return 
                restrict: 'EA',
                scope: buytypeButton:'=', popoverHtml:'@', clickNext:'&',
                template: '<a href="" tabindex="0" class="btn btn-block btn-success 
    ng-class: disabled: !buytypeButton.type " role="button" data-ng-click="clickNext()" 
    >next</a>',
                    link: function (scope, el, attrs)
                        $(el).popover(
                            trigger: 'click',
                            html: true,
                            toggle:'popover',
                            title: 'notice!!',
                            content: scope.popoverHtml,
                            placement: 'top'
                        );
    $(el).click(function() 
                   if(scope.buytypeButton.type == true)
                       $(el).popover('hide');
                   
                );
        attrs.$observe('popoverHtml', function(val)
                            $(el).popover('hide');
                            var popover = $(el).data('bs.popover');
                            popover.options.content = val;
                        );
                    
                ;
            );

【讨论】:

【参考方案2】:

没有使用引导弹出框。我想您可以观看 buytypeButton 并在弹出窗口更改时显示/隐藏。

link: function (scope, el, attrs)
    // ...  your code

    scope.$watch('buytypeButton', newVal => 
        if (newVal) 
            $(el).popover('hide');
         else 
            $(el).popover(
                // ...
            )
        
    )

【讨论】:

当我使用此代码时,它设置错误 TypeError: Cannot read property 'options' of undefined

以上是关于我如何防止在 angularJs 中显示引导弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

我可以在引导弹出窗口中显示 Twitter 提要吗?

引导弹出框不适用于 ng-repeat

引导弹出窗口未显示在所有元素之上

容器移动时的引导弹出位置

关闭引导弹出事件与 jquery 验证插件冲突

如何更改引导弹出箭头的大小