将 html 附加到指令中的元素并创建一个与其交互的本地函数

2024-03-08

在我的 AngularJS 应用程序中,我到处都有不同的复杂输入。例如,某些输入具有使用 Google Places 自动完成功能或 Twitter Bootstrap 自动完成功能的指令。

我正在寻找一种方法来制作一个指令,当我们添加一些文本(如 iOS 功能)时,该指令会显示擦除按钮。

我做了这个,但是scope.erase不启动,也不ng-show.

是否可以在文本输入后添加 HTML 并在控制器内“播放”它们?

My test:

app.directive('eraseBtn', function($parse, $compile){

return {
    require: 'ngModel',
    restrict: "A",
    transclude: true,
    link : function(scope, element, attrs, model){

        element.parent().append('<button ng-click="erase()" ng-show="model.length > 0" class="erase-btn">x</button>');

        scope.erase = function(){
            console.log('Erase test');
        }
    }
}
});

我不想使用模板,因为我所有输入的 HTML 都非常不同。


您可以根据模型的值在指令的链接函数内创建自定义输入。如果您希望将这些元素绑定到模型或使用指令来构建它们,您应该使用$compile(并且不要忘记使用模型调用已编译的模板):

HTML

<!DOCTYPE html>
<html ng-app="demo">

  <head>
    <script data-require="angular.js@*" data-semver="1.2.10" src="http://code.angularjs.org/1.2.10/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-controller="demoController">
    <div demo-directive ng-repeat="input in inputs"></div>
  </body>

</html>

JavaScript

angular.module('demo', []).
  controller('demoController', function($scope) {
    $scope.inputs = [{
      inputType: 'checkbox',
      checked: true,
      label: 'input 1'
    }, {
      inputType: 'text',
      value: 'some text 1',
      label: 'input 2'
    }];

    $scope.doSomething = function() {
      alert('button clicked');
    };
  }).
  directive('demoDirective', function($compile) {
    return {
      template: '<div><label>{{input.label}}: </label></div>',
      replace: true,
      link: function(scope, element) {
        var el = angular.element('<span/>');
        switch(scope.input.inputType) {
          case 'checkbox':
            el.append('<input type="checkbox" ng-model="input.checked"/><button ng-if="input.checked" ng-click="input.checked=false; doSomething()">X</button>');
            break;
          case 'text':
            el.append('<input type="text" ng-model="input.value"/><button ng-if="input.value" ng-click="input.value=\'\'; doSomething()">X</button>');
            break;
        }
        $compile(el)(scope);
        element.append(el);
      }
    }
  });

笨蛋:http://plnkr.co/edit/pzFjgtf9Q4kTI7XGAUCF?p=preview http://plnkr.co/edit/pzFjgtf9Q4kTI7XGAUCF?p=preview

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

将 html 附加到指令中的元素并创建一个与其交互的本地函数 的相关文章

随机推荐

  • Java 中的类型转换以及动态类型与静态类型

    我正在学习静态类型与动态类型 并且我已经了解了它的大部分内容 但这种情况仍然让我困惑 如果上课B延伸A 我有 A x new B 是否允许以下 行为 B y x 或者是否需要显式转换 B y B x Thanks 显式转换是required
  • 如何退出 Google 云端硬盘帐户?

    如何退出 Google 云端硬盘服务 我不想切换帐户 而是最终退出 我正在开发一个应用程序 该应用程序将使用用户的 Google 云端硬盘存储以及其他存储服务 因此我需要允许用户退出 Google Drive 我发现这有效 这些与我使用的登
  • 如何验证 HTML5 日期格式

    我想使用 HTML5 日期输入字段
  • Tomcat 7 - Maven 插件?

    我只是想仔细检查一下 是否有人找到或正在开发 Tomcat 7 插件 如果没有 有人有兴趣帮助我启动和运行它吗 我想要 Glassfish 的另一个快速替代品 JBoss AS 6 0 对于快速模型来说仍然有点重 Walter 它对我来说如
  • malloc(sizeof(int)) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))

    我承认这三个都有不同的含义 但是 我不明白这些都适用于哪些特定情况 任何人都可以分享每个例子吗 谢谢 malloc sizeof int malloc sizeof int int malloc sizeof int malloc size
  • 事务隔离级别和锁定记录,对正在运行的事务中的记录禁用 SELECT

    Can I disable SELECT在事务内部使用的行上 例如 表中的行potatoes在事务 1 中被销毁 并且需要很长时间才能销毁 在交易2中 有SELECT on the potatoes桌子 我不想选择事务 1 中正在使用的那些
  • 实体框架代码优先开发资源和文档

    我知道 EF4 仍在开发中 但作为该主题的新手 我需要使用 EF 4 代码优先方法的文档 教程等 所有信息都位于 EF 4 团队博客中 但分散在不同的帖子中 全面覆盖真的很好 有人知道有这样一个地方吗 迄今为止我见过的最好的在线资源是斯科特
  • 如何禁用按 Enter 键时的自动提交行为?

    我想根据我输入的输入文本按 Enter 键转到 p2 htm 或 p3 htm 我还想按 Submit1 按钮手动提醒 no1 它在 FireFox 中工作 但在 IE6 中 当我按 Enter 键时 它将提交提交按钮 我怎样才能在 IE
  • 使用 Google Cloud + CloudFlare 创建子域

    我在 CloudFlare 上有一个域名 bar com 该域名链接到 Google Cloud 上托管的网站 我可以在 CloudFlare 上为子域名 foo 创建新的 A 记录 但如何将其映射到 Google Cloud 上的 bar
  • 将 LinearSVC 的决策函数转换为概率(Scikit learn python)

    我使用 scikit learn LinearSVC 中的线性 SVM 来解决二元分类问题 我知道 LinearSVC 可以为我提供预测标签和决策分数 但我想要概率估计 对标签的置信度 由于速度原因 我想继续使用 LinearSVC 与具有
  • python - 获取当前模块中所有函数的列表。检查当前模块不起作用?

    我有以下代码 fset obj for name obj in inspect getmembers sys modules name if inspect isfunction obj def func num pass if name
  • 使用 d3-cloud 动态调整大小的词云

    我正在通过修改以下代码来创建词云 https github com jasondavies d3 cloud https github com jasondavies d3 cloud 我可以通过修改 w h 来更改大小 但我想随着浏览器窗
  • ModelState.AddModelError 到字段的特定 ValidationMessageFor?

    我有以下代码来生成 html 输入和验证消息 Html ValidationSummary false div class col md 10 Html TextBoxFor model gt model ImageUpload new t
  • 具有多个参数的 MapStruct QualifiedByName

    我遇到过一种情况 我的映射方法有 3 个参数 并且所有这三个参数都用于派生目标类型的属性之一 我在接口中创建了一个默认映射方法 保留了派生属性的逻辑 现在为了调用此方法 我可以使用expression java method call he
  • 内存泄漏是否正常? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否可以接受内存泄漏 http en wikipedia org wiki Memory leak在您的 C 或 C 应用程序中 如果您分配一些
  • evp_crypt 在 c 中的 for 循环中不起作用

    我是新来的 如果我做错了什么 请原谅 我尝试使用加密字符串创建一个数组 我使用 EVP API 进行加密 这工作正常 但是当我尝试在 foo 循环中使用加密函数时 控制台没有给我任何信息 这是我的加密函数 char encrypt char
  • 如何在 Python 中压缩字符串

    我正在制作一个 python 脚本 将字符串发送到 Web 服务 在 C 中 我需要压缩或压缩这个字符串 因为带宽和 MB 数据是有限的 是的 大写 因为它非常有限 我正在考虑将其转换为文件 然后压缩该文件 但我正在寻找一种直接压缩字符串的
  • 为什么 Backbone Collection fetch 不返回承诺

    下面的示例代码运行良好 Auth controller prototype isLogged function Check if the user is authenticated var getAuthStatus this auth m
  • IE10 中本地存储的访问被拒绝

    昨天我安装了 Windows 8 现在试图了解为什么我在访问本地存储时收到 访问被拒绝 消息 该页面与浏览器 http localhost 位于同一台 PC 上 我的感觉是IE 10中的一项安全设置是错误的 但我还没弄清楚是哪一项 触发错误
  • 将 html 附加到指令中的元素并创建一个与其交互的本地函数

    在我的 AngularJS 应用程序中 我到处都有不同的复杂输入 例如 某些输入具有使用 Google Places 自动完成功能或 Twitter Bootstrap 自动完成功能的指令 我正在寻找一种方法来制作一个指令 当我们添加一些文