javascript - 打印被 Angular 过滤器 chop 的字符串

标签 javascript css angularjs printing

在我的 Angular 应用程序中,我构建了一个 View ,其特定目的是以打印友好的方式显示数据。

但是,我还添加了显示更多/更少文本的选项,它使用 Angular filterstrings 剪切为预定义的字符数并让用户通过单击按钮查看其余部分,如下所示:{{elem | cut:!show[$index]:true:max}}.

这是完整的过滤器:

angular.module('pear').filter('cut', function () {
    return function (value, enabled, wordwise, max, tail) {

        if (!value) return '';
        max = parseInt(max, 10);
        if (!max) return value;
        if(!enabled) return value;
        if (value.length <= max) return value;

        value = value.toString().substr(0, max);
        if (wordwise) {
            var lastspace = value.lastIndexOf(' ');
            if (lastspace != -1) {
                value = value.substr(0, lastspace);
            }
        }

        return value + (tail || '...');
    };
});

这就是它最终的样子:

Angular filter in action

有没有办法为打印 View 禁用此过滤器,或者以某种方式强制使用 @media print 显示全文的 css 条件?

作为引用,这就是我目前在模板中使用过滤器的方式,以防需要不同的标记方法:

<div class="content"> {{elem | cut:!show[$index]:true:max}}
    <span ng-show="!show[$index] && elem.length > max" class="show-more" ng-click="toggleShow($index)">more</span>
    <span ng-show="show[$index]" class="show-more no-print" ng-click="toggleShow($index)">less</span>
</div>

最佳答案

检查工作演示:JSFiddle .

将以下代码添加到您的 Controller 。逻辑是:在打印之前,禁用过滤器。并在打印后重新启用它。使用 window.matchMedia检测是否正在打印。

Note: be careful about the browser compatibility (IE>=10, Opera>=12.1, etc.)

这种解决方案的优点是:您不仅可以通过 CSS 来控制 View 。实际上,您可以设计专门用于打印的 View 。当然,打印后你需要恢复之前的状态。

if (window.matchMedia) {
    var mediaQueryList = window.matchMedia('print');
    mediaQueryList.addListener(function (mql) {
        $scope.$apply(function () {
            var isPrinting = mql.matches;
            $scope.enabled = !isPrinting;
        });
    });
}

关于javascript - 打印被 Angular 过滤器 chop 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32613615/

相关文章:

css - 在不同分辨率下保持绝对定位元素在相同位置

javascript - jQuery - 尝试隐藏框架内的元素

javascript - Google Apps 脚本 setValues() 不正确的高度错误

javascript - 隐藏谷歌地图地形和标签选项

html - 标题不会断字

angularjs - 将 angularjs ui.map 与地理位置 api 集成

javascript - 如何使用 AnagularJs、Javascript 动态创建目录/文件夹来存储上传的图像?

angularjs - 选项卡上的 ag-grid 中的清除过滤器已更改

javascript - IE8 中的 ActiveXObject

javascript - react native Firebase |将子值转换为列表