如何在具有隔离范围的指令上使用 ng-click?

2024-05-10

当范围在指令上继承时,我可以让 ng-click 工作,但在隔离时则不行。UPDATE: The point is that I want the click function to be defined as part of the directive... moving the function definition into a different scope is not what I want.

这是具有继承范围的工作示例:https://codepen.io/anon/pen/PGBQvj https://codepen.io/anon/pen/PGBQvj

这是具有隔离范围的损坏示例;https://codepen.io/anon/pen/jrpkjp https://codepen.io/anon/pen/jrpkjp

(单击数字,它们在第一个示例中增加,但在第二个示例中不增加)

一些代码...

The HTML

<div ng-app="myApp" ng-controller="baseController">
  <my-directive ng-click="hello()" current="current"></my-directive>
</div>

具有继承范围的指令:

angular.module('myApp', [])
    .controller('baseController', function($scope) {
    $scope.current = 1;
  })
    .directive('myDirective', function() {
    return {
      link: function(scope, element, attrs) {      
        scope.hello = function() {
          scope.current++
        };
      },
      replace: true,
      scope: true,
      template: '<div><child>      <strong>{{ current }}</strong></child></div>'
    }
    })
  .directive('child', function() {
    return {
      link: function(scope, element, attrs) {
        console.log("horeee");
      }
    }
  });

相同的指令但具有独立的范围:

angular.module('myApp', [])
    .controller('baseController', function($scope) {
    $scope.current = 1;
  })
    .directive('myDirective', function() {
    return {
      link: function(scope, element, attrs) {      
        scope.hello = function() {
          scope.current++
        };
      },
      replace: true,
      scope: {
        current:'='
      },
      template: '<div><child>      <strong>{{ current }}</strong></child></div>'
    }
    })
  .directive('child', function() {
    return {
      link: function(scope, element, attrs) {
        console.log("horeee");
      }
    }
  });

问题是你试图调用一个未定义的函数。如果您希望在独立指令内定义逻辑,则无需传入函数引用。

<my-directive current="current"></my-directive>

你无法通过ng-click="hello()"这里。这是控制器的范围,所以hello()未定义。

相反,移动ng-click指令模板的事件

template: '<div ng-click="hello()">

补充一点: 您正在使用link()该指令的功能。这是为 DOM 操作保留的。相反,定义hello()controller功能。

controller: function ($scope) {
  $scope.hello = function() {
      $scope.current++
  }
},

不过,我认为这里存在一个更大的架构问题。独立指令或组件的要点是将逻辑封装在其自身内部。它不应该操纵外部状态。在此示例中,您将增加一个数字。如果在应用程序的另一部分中您希望减少一个数字怎么办?使用递减逻辑复制指令会导致大量代码重复。

相反,您应该在控制器中定义增量或减量功能,并将其传递给指令。

<my-directive change-number="increment()" current="current"></my-directive>

然后,使用&将函数引用绑定到指令的语法:

scope: {
  current:'=',
  changeNumber: '&'
},

并打电话changeNumber从模板中。这样做非常有利于代码的重用。

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

如何在具有隔离范围的指令上使用 ng-click? 的相关文章

随机推荐

  • 从流中读取 PNG 文件

    我试图为 android mobile so 在服务器端构建 RDP 应用程序 我使用机器人类发送 png 图像 但在客户端我无法读取该消息并将其打印在我的 android 设备上 我正在使用以下代码来读取 JPEG 文件正文数据 并且我能
  • 在 Python 2.6 中访问外部作用域

    比如说 我有一些带有变量的作用域 并且在此作用域中调用的函数想要更改一些不可变变量 def outer s qwerty n 123 modify def modify s abcd n 456 是否有可能以某种方式访问 外部范围 就像是n
  • perl xs - 从 c 数组返回 perl 数组

    使用 XS 我尝试将值从 C 数组传递到可在脚本中使用的 Perl 数组 这是我的 xs 文件中的代码 AV DoubleArray getPerlArray CODE r newAV for size t i 0 i lt THIS gt
  • 如何使用 JSON 结果更新 Extjs 进度条?

    我在让进度条从 Json 结果中检索进度并根据每 10 秒的计时器检查更新进度条时遇到一些困难 我可以创建这样的 json 结果 success true progress 0 2 我想总体思路是 我需要一个间隔设置为 10 秒的任务 并让
  • 既然 Gradle 和 Maven 都弃用了 http,如何使用 Liferay Mobile SDK 6.2.18 生成 jar 库?

    在我当前的项目中 我们正在维护 开发使用客户网站 liferay 6 2 服务的移动 android iOS 应用程序 每当后端的人员生成新服务 或者只是将现有服务更新为具有新功能的新版本 时 我们需要使用 Liferay Mobile S
  • 如何从本地系统将 lxml 安装到 virtualenv 中?

    我的系统上安装了 lxml 模块 debian 包python lxml 对于python 2 6 我也使用基于python2 6的virtualenv 使用标志安装 no site packages 是否可以在虚拟环境中安装 lxml 而
  • 哈德森中的java OutOfMemoryError

    我在 hudson 中运行 pmd findbugs 时收到以下错误 FATAL Java heap space java lang OutOfMemoryError Java heap space at java util HashMap
  • 使用 linq 组合对象

    我有一个类的 2 个实例 它实现了IEnumerable界面 我想创建一个新对象并将它们合并为一个 我明白我可以使用for each去做这个 有 linq lambda 表达式的方法可以做到这一点吗 EDIT public class Me
  • 2.5 是否有一个 Python 模块提供类似于 2.6 中的 "string".format() 调用的功能?

    2 5 是否有免费的 Python 模块提供类似于 2 6 3 x 中的 string format 调用的功能 我正在为 2 5 编写新代码 我不想在新代码中使用 格式表达式 您可能会发现这里的代码可以适应您的需要 http svn py
  • SlidingTabLayout 中自定义未选择的选项卡文本颜色

    我正在使用SlidingTabLayout类来在我的 Android 应用程序中显示选项卡 我正在使用我设置的自定义选项卡视图setCustomTabView功能 虽然我可以轻松自定义选定选项卡的文本颜色 但我找不到自定义未选定选项卡的文本
  • 如何取消 Postgres 中的错误命令(从终端)?

    我在尝试编写函数时写了一个错误的命令 我在函数中犯了一个错误 并且想在没有完成函数的情况下退出它 并且我想退出它 但是终端的命令提示符不允许我退出 我试过这个 https unix stackexchange com questions 4
  • 如何为我的杆和楔子添加纹理?

    我正在使用绘制几个条形图和饼图matplotlib pyplot bar http matplotlib org api pyplot api html matplotlib pyplot bar and matplotlib pyplot
  • PSD 到 html 转换 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • WSGI 中的 httplib CannotSendRequest 错误

    我使用了两个不同的 python oauth 库和 Django 来通过 twitter 进行身份验证 该设置是在带有 WSGI 的 apache 上进行的 当我重新启动服务器时 大约 10 分钟一切正常 然后 httplib 似乎锁定了
  • 如何创建 Keras 层来执行 4D 卷积 (Conv4D)?

    看起来tf nn convolution应该能够进行 4D 卷积 但我无法成功创建 Keras 层来使用此函数 我尝试过使用 KerasLambda层来包裹tf nn convolution功能 但也许其他人有更好的主意 我想利用数据的高维
  • 正确缩放 Javascript Canvas 游戏

    我正在尝试根据屏幕尺寸动态缩放画布游戏 我了解如何根据屏幕尺寸调整画布大小 但我也想调整内容大小 基本上我希望游戏在每台设备上看起来都一样 我目前遇到的问题是 当拥有 4k 屏幕的人玩游戏时 他们可以轻松看到整个地图 当有人的屏幕非常小时
  • 将字符写入 Java 套接字时 fsockopen 10053 错误

    Right 我正在尝试用 PHP 编写一个小脚本 将游戏中的聊天包发送到 Minecraft Deliberately low timeout mc fsockopen localhost 25565 errno err 3 现在 如果连接
  • 无限递归,同时扩展管理员的应用程序change_form模板

    我有以下模板template admin change form html extends admin change form html block extrahead include dojango base html block doj
  • RVM + Ruby 1.9.2 + Rmagick + Lion = 系统工作,RVM 不工作

    我已通过 RVM 在全新安装的 OS X Lion 上安装了 Ruby 1 9 2 我已经通过 homebrew 安装了 Ghostscript 和 imagemagick 当使用 RVM 运行 gem install rmagick 时
  • 如何在具有隔离范围的指令上使用 ng-click?

    当范围在指令上继承时 我可以让 ng click 工作 但在隔离时则不行 UPDATE The point is that I want the click function to be defined as part of the dir