Angular JS 指令 - 模板、编译还是链接?

2023-12-13

我想创建一个 Angular JS 指令来检查字符串的长度,如果字符串太长,无法使用过滤器缩短它,并在鼠标悬停时显示 Angular-UI 弹出窗口。

我应该在指令中的哪个位置放置功能以使其正常工作(链接、模板或编译)?

风景:

<div myapp-shorten="project">{{project.Description}}</div>

到目前为止,这是我对该指令的首次尝试:

angular.module('myapp.directives', [])
 .directive('myappShorten', function () {

    function link(scope, element, attrs) {

        var outputText = "";

        if (myappShorten.Description.length > 20) {
            outputText += "<div popover='{{myappShorten.Description}}' popover-trigger='mouseenter'>" +
            "{{myappShorten.Description | cut:true:20:' ...'}}</div>";
        } else {
            outputText += "<div>{{myappShorten.Description}}</div>";
        }

        element.text(outputText);
    }

    return {
        link: link,
        scope: {
            myappShorten: "="
        }
    };

});

首先,您可以更改过滤器,如果不需要,它不会改变字符串

其次,由于您只需要过滤器和弹出框 - 模板就足够了。

 angular.module('myapp.directives', [])
   .directive('myappShorten', function () {

     return { 
       scope: { data : '=myappShorten',
       template:"<div popover='{{data.Description}}' popover-trigger='mouseenter'>" +
        "{{ data.Description | cut:true:20:' ...' }}</div>"
     }
   })

或者,您可以使用组合ng-show and ng-hide

 app.directive('shorten', function () {
return {
    restrict: 'A'
    , scope :  {
        shorten : '=',
        thestring: '='   
    }
    , template: "<div ng-show='sCtrl.isLong()' tooltip='{{ sCtrl.str }}'>{{ sCtrl.short() }}</div>"+
                "<div ng-hide='sCtrl.isLong()'>{{ sCtrl.str }}</div>"

    , controllerAs: 'sCtrl'
    , controller: function ($scope) {
        this.str = $scope.shorten || ''
        this.length = $scope.thestring || 20

        this.isLong = function() {
            return this.str.length > this.length   
        }

        this.short = function() {
            if ( this.str.length > this.length)  {
                return this.str.substring(0,this.length)  + '...'                    
            }
        }                                  
    }                               
  }       
})

第三种选择是在 myappShrten.Description 上实际使用编译和 $watch,但这对我来说似乎有点过分了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular JS 指令 - 模板、编译还是链接? 的相关文章

随机推荐

  • 以编程方式禁用 Android 中软输入键盘上的语音转文本按钮(麦克风)

    先谢谢您的帮助 我正在开发一个用于研究目的的 Android 应用程序 需要禁用软输入键盘上的语音到文本按钮 其原因是由于我正在开发的应用程序使用麦克风而出现并发问题 我知道对于一般应用程序来说 禁用按键通常被认为是不可能的 因为用户可能会
  • 使用 Spring Reactor 时为什么要使用断路器和隔板?

    请帮助我找到断路器和隔板模式在 Spring Reactor 应用程序中有用的原因 由于 Reactor 中的操作将是非阻塞的 并且这两种模式旨在节省对资源 主要是线程 的潜在影响 因此在什么情况下我可以使 Spring Reactor 应
  • 如何“独立”使用PolicyHttpMessageHandler?

    我只是想创建一个简单的测试 我使用DelegateHandlers实例化一个HttpClient无需带Asp net Core包 我有 2 个删除处理程序 ThrottlingDelegatingHandler PolicyHttpMess
  • 如何在闪亮中设置两个相关输入值(滑块和数字)的初始值?

    我已经在我闪亮的应用程序中定义了两个互连或相互依赖的输入 现在 我的问题是为这些滑块和数字输入设置特定的初始值 似乎他们总是从最小值开始 即使我现在也不知道为什么 如何指示这些输入参数的唯一起点或初始值 我附上了我的应用程序的简化部分 以便
  • 屏幕关闭时检测手机移动

    我正在开发一个应用程序 它应该检测用户的移动 当他停止超过 5 分钟时 它应该发出警报 我能够使用加速度计检测运动 但问题是屏幕关闭时它不起作用 我也尝试过使用部分wakeLock 重新注册加速度计也不起作用 这应该是摩托罗拉设备的解决方法
  • RegEx 在 Powershell 中匹配两个字符串之间的字符串

    这是我的示例数据 选项失败不匹配选项批处理开启选项确认关闭打开 sftp 用户名 电子邮件受保护 22 主机密钥 ssh rsa 1024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 获取
  • 如何比较和排序 2 个 csv 以显示差异

    您好 我有 2 个以下格式的 csv 基本上是电子邮件列表以及该发件人向我们发送电子邮件的次数 文件1 csv Email Value email protected 2 e email protected 4 email protecte
  • R openNLP无法找到函数sentDetect()

    我正在使用一些软件包 webmining sentiment openNLP 来提取一些有关股票 JPM 的句子 但运行时出现以下错误 eval expr envir enclos 中的错误 找不到函数 sentDetect 这是我使用的代
  • 如何为连接到 I2C gpio 扩展器的虚拟 mdio-gpio 设备配置 ACPI *.asl

    我正在使用 Q7 模块 x86 并尝试在 Linux 上使用 ACPI SSDT Overlay 配置我们的外设 但我对此很挣扎 我想我误解了ACPI的一些核心概念 Problem CPU gt I2C gt PCA9575 GPIO Ex
  • 使用 QXmlQuery (Qt XQuery) 时如何绑定命名空间前缀?

    我正在尝试使用 QXmlQuery 对具有声明的默认命名空间的文档执行 XQuery 表达式 供讨论
  • 当我想从steam市场获取json时,jquery json错误

    我在向 Steam 发送 ajax 请求时遇到问题 我想从蒸汽市场获得价格 function jPrice httpToJson getJSON httpToJson function data return data median pri
  • 如何将 DLL 中的表单嵌入到 Inno Setup 向导页面中?

    我在 Delphi DLL 中构建了一些 VCL 表单 这些表单在 Inno Setup 安装期间显示 然而 如果我可以将这些表单嵌入到 Inno Setup 向导中 那就会更加简洁 我该怎么做呢 对您来说最简单的方法是创建一个导出函数 它
  • 单队列:多个消费者并发消息处理

    我是jms新手 目标是在异步侦听器的 onMessage 方法中同时处理来自队列的消息 方法是将侦听器实例附加到多个消费者 每个消费者使用自己的会话并在单独的线程中运行 这样消息就会传递给不同的消费者并发处理 1 是否可以通过创建多个消费者
  • 在 R Shiny 中使用 renderText() 输出多行文本

    我想使用一个输出多行文本renderText 命令 然而 这似乎不可能 例如 从闪亮教程我们已经截断了代码server R shinyServer function input output output text1 lt renderTe
  • 什么是 JavaScript 数组?

    我试图了解 JavaScript 数组是什么 因为传统编程语言将数组定义为可以使用偏移量寻址的连续存储区域 现在 一个普通的 JavaScript 对象可以被寻址为 myObj myProperty my Value or myObj my
  • React:如何从子组件渲染父组件?

    我的任务是为客户构建一个项目 该项目需要一个父组件包装三个子组件 具体来说 父组件按照以下方式渲染子组件 父级 顶部 中间 底部 PARENT 组件代表一组项目中的一个 在顶部组件中 有一个菜单按钮 显示组中所有项目的列表 其目的是 如果用
  • 在循环中使用 Promises 和 fs.readFile

    我试图理解为什么下面的承诺设置不起作用 注意 我已经使用 async map 解决了这个问题 但我想了解为什么我的以下尝试不起作用 正确的行为应该是 bFunc 应根据需要运行多次以读取所有图像文件 下面的 bFunc 运行两次 然后 cF
  • 计算不带小数的平均值

    我希望我能弄清楚这一点 我需要生成一个表 其平均值称为 AVG AMT 整数 并且没有小数 它可以舍入或截断 对于这张桌子来说 这确实不重要 这是我试图写的 SELECT TC Code AVG ALW AMT as int 8 0 AS
  • 如何在我不想编辑的第 3 方代码中禁用 gcc 发出的未使用变量警告?

    我想知道您将什么开关传递给 gcc 编译器来关闭未使用的变量警告 我在 Windows 上的 boost 中遇到错误 并且我不想触及 boost 代码 C boost 1 52 0 boost system error code hpp A
  • Angular JS 指令 - 模板、编译还是链接?

    我想创建一个 Angular JS 指令来检查字符串的长度 如果字符串太长 无法使用过滤器缩短它 并在鼠标悬停时显示 Angular UI 弹出窗口 我应该在指令中的哪个位置放置功能以使其正常工作 链接 模板或编译 风景 div proje