Javascript 具有独立作用域版本的指令冲突

Javascript 具有独立作用域版本的指令冲突,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,在我的Angular应用程序中,我有一个指令“editable”。它写在Angular版本1.2.0-rc.2上,运行良好,但当我将框架升级到版本1.2.13时,指令中断。我检查了其他版本的功能,但感到困惑,因为该指令只适用于三个版本:1.2.0rc1、1.2.0-rc.2和1.2.0-rc.3 在新版本中,此指令仅适用于两种丑陋的编辑: 1.指令的属性“terminal”设置为“true” 2.在“link”函数中编译元素 指令具有简单的逻辑: 显示以前保存的值 单击按钮“编辑”->显示新值的

在我的Angular应用程序中,我有一个指令“editable”。它写在Angular版本1.2.0-rc.2上,运行良好,但当我将框架升级到版本1.2.13时,指令中断。我检查了其他版本的功能,但感到困惑,因为该指令只适用于三个版本:1.2.0rc1、1.2.0-rc.2和1.2.0-rc.3

在新版本中,此指令仅适用于两种丑陋的编辑: 1.指令的属性“terminal”设置为“true” 2.在“link”函数中编译元素

指令具有简单的逻辑:

  • 显示以前保存的值
  • 单击按钮“编辑”->显示新值的输入
  • 单击“确定”按钮保存值->显示新的保存值
  • 代码如下:

  • 此版本适用于:
  • 此版本已损坏:
  • 此版本适用于新插入:
  • 因此,我有一个问题:

  • 为什么这一切都会发生
  • 1.2.0-rc*版本和其他版本之间有什么区别,即制动关闭指令
  • 有没有一种方法比compile指令和向repair指令添加TERMINAL属性更好,因为许多其他指令也被破坏了 第一理解 它们实际上改变了某些内容的编译方式,在孤立范围的情况下,内容是根据确定的范围编译的

    中断对1.2.0版的更改 请查看版本1.2.0带来的突破性更改:

    • $compile
      • 由于d0efd5ee,在应用程序模板或某些其他指令模板中定义的子元素不会获得隔离范围。理论上,任何人都不应该依赖这种行为,因为这种行为非常罕见——在大多数情况下,隔离指令都有一个模板
      • 由于909cabd3,没有隔离作用域的指令无法从同一元素上的隔离指令获取隔离作用域。如果代码依赖于此行为(非隔离指令需要从隔离作用域内访问状态),请更改隔离指令以使用作用域局部变量显式传递这些状态
    在您的特定情况下,编辑按钮无法访问在隔离作用域上实现的属性和方法。在那些“rc”版本中,您可以暂时做到这一点

    快速解 不要对指令使用隔离作用域

    深层解 你实际上在做一些很奇怪的事情。创建一个独立的作用域,以将
    ngModel
    绑定到指令使用的作用域

    但是,使用
    ngModel
    指令不能这样工作。您必须使用名为
    require
    的指令属性,要求由
    ngModel
    指令添加的
    ngModelController
    实例,您将用需要控制器的指令名称(即“ngModel”)填充该实例。 然后,
    link
    函数的第四个参数将引用
    ngModelController
    实例,该实例在Angular文档中有很好的文档记录

    所以

    • 不需要时不要使用隔离作用域
    • 记住,除了使用
      $$childHead
      属性之外,隔离作用域不再可以直接访问元素本身。。。但是你不应该那样做

    请在您的帖子中发布相关代码,使您的问题独立,而不依赖于第三方服务,即plunkerit’s难以判断发生了什么(可能在相邻的
    ng机型
    之前提前终止,尽管它们具有相同的优先级-0-这应该可以防止这种影响),但是,如果编译
    editable
    指令。无论如何,如果你真的想深入研究它,我建议你看一下.Eliran,如果你看一看编译指令,没有在你的链接中将属性“terminal”设置为TRUE,你会看到,两个指令上的值都会改变。这对我来说是个大问题=(