【问题标题】:uibPopover not showing after promise resolves on first click在第一次单击时承诺解决后,uib Popover 未显示
【发布时间】:2018-08-21 00:25:44
【问题描述】:

相关信息: 以角度 1.5.8 编写。 引导用户界面 1.1.2。 uibPopover 用于显示我的弹出框。

我在尝试显示依赖于 promise 数据的 popver 时遇到问题

相关的角度服务获取调用:

       this.getDetails = function (req) {
            var deferred = $q.defer();

            return $http.get("/api/getDetails?id=" + req).then(
                function (response) {
                    deferred.resolve(response.data.ResponseData);
                    return deferred.promise;
                }
            );
        }

角度控制器代码:

$scope.showPopOver(req){
      angularService.getDetails(req).then(function(response) {

            $scope.vm.myPopOverData = response;

            $scope.vm.htmlPopOver = {
                templateUrl: '/path/to/template.html',
                title: 'Details'
            };

        });
}

弹出框所在的html:

<a style="cursor:pointer" tabindex="0" popover-placement="right-top" uib-popover-template="vm.htmlPopOver.templateUrl" popover-title="{{vm.htmlPopOver.title}}" 
                   popover-trigger="outsideClick" ng-click="showPopOver(data)" >Click me</a>

第一次单击我的锚标记时,会检索数据,但不会显示任何弹出框。第二次单击,弹出框将显示,但是 api 调用没有返回应显示的数据(这是一个带有 ng-repeat 的表)。它不可避免地会在 Promise 完成解析后设置,但在等待服务器响应时,弹出框保持关闭/隐藏会很好。

所以,我想我有两个问题。第一次单击弹出框只会检索数据。另一个问题是在检索数据之前出现的弹出框。

这个问题有简单/优雅的解决方案吗?

提前谢谢你

【问题讨论】:

    标签: jquery angularjs angular-ui popover


    【解决方案1】:

    您可以使用popover-is-open="isOpen" 属性来传递弹出框的状态,当您希望它显示时只需切换isOpen 标志即可。

    <a style="cursor:pointer" tabindex="0" 
      popover-placement="right-top" uib-popover-template="vm.htmlPopOver.templateUrl"
      popover-title="{{vm.htmlPopOver.title}}" 
      popover-is-open="vm.isOpen"
      popover-trigger="outsideClick" ng-click="showPopOver(data)">
        Click me
    </a>
    

    代码

    this.getDetails = function (req) {
        return $http.get("/api/getDetails?id=" + req).then(
            //removed unnecessary promise 
            function (response) {
                vm.isOpen = true;
                return response.data.ResponseData;
            }
        );
    }
    

    【讨论】:

    • 这个问题是会有几行然后绑定到相同的布尔值,这将导致所有弹出框打开而不管被点击。我曾考虑过用它们自己的布尔值“启动”我的对象列表,但我想看看在我弄乱我整洁的代码之前是否有更好的方法。不过还是谢谢你的回复
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 2017-04-20
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2013-02-27
    • 2020-03-16
    相关资源
    最近更新 更多