当前位置: 首页 > 面试题库 >

1.0.x和1.2.x之间的AngularJS范围差异

林华皓
2023-03-14
问题内容

在下一个稳定的AngularJS发行时,我将应用程序从 1.0.8 迁移到 1.2

在AngularJS 1.0.8中
,可以为诸如的指令设置隔离范围follow。然后,该指令将使用其自己的test()功能而不是控制器的test()功能。

<my-dialog property="something">
    <button ng-click="test()">Load Test</button>
    Check out the test: "{{ testMessage }}"
</my-dialog>

Java脚本

  .controller('Ctrl', function(scope) {
    scope.test = function () {
       scope.testMessage = 'CTRL Test loaded! Whooops.';
    }
  })

  .directive('myDialog', function() {
    return {
      restrict: 'E',
      scope: {
          property: '='
      },
      link: function(scope) {
          scope.test = function () {
            scope.testMessage = 'Isolated Test loaded. Yes!';
          }
      }
    };

在AngularJS 1.2中, 此行为不再起作用。单击该按钮将立即激活控制器的test()功能。

参见以下jsFiddle比较:

  • 角1.0.8
  • 角1.2.0

到底发生了什么变化,我该如何重现旧的行为?

注意

我发现我可以将指令模板放置在额外的HTML文件中,或者将其编译为字符串以使其正常工作(jsFiddle),但在我看来,这太多了,因为模板已固定并将HTML分成几个部分HTMLhtml" target="_blank">文件很麻烦。

编辑

当没有其他属性可共享时,@
elclanr的答案
可以正常工作。我更新了jsFiddle以传递一些任意属性。我现在应该如何进行?


问题答案:

看起来这是突破性更改的预期结果:github.com/angular/angular.js/commit/…它是在1.2.0版(在rc3之后)(https://github.com/angular/angular。
js / blob / master /
CHANGELOG.md-
请参阅1.2.0的第一个重大更改-$
compile):

修复了隔离范围到处泄漏到同一元素的其他指令中的问题。

现在,隔离范围仅可用于请求隔离范围及其模板的隔离指令。

非isolate指令不应在同一元素上获得isolate指令的isolate范围,相反,它们将接收原始范围(这是新创建的isolate范围的父范围)。

还请查看此讨论:github.com/angular/angular.js/issues/4889

值得注意的是:“隔离范围仅适用于模板,不适用于该指令未提供的标记。1.2之前的隔离范围存在导致这种泄漏的错误。 隔离范围的要点是它仅适用于 模板
html" target="_blank">声明它的指令,而不是其他指令或标记。 ”(来自tbosch)

1.2.0 之前的版本中,同一DOM元素上的所有内容都共享同一范围。 因此,1.2.0对具有独立作用域的指令的工作方式进行了重大更改。



 类似资料:
  • 我对Numpy中和之间的区别感到困惑。 例如,我有一个二维数组 当我尝试打印和时,它们都给了我相同的输出: 但是,当我试图通过添加一个维度来广播它时 他们给了我不同的结果。 我试图找出区别,但不能。

  • 问题内容: 在指令内部创建 隔离作用域 使我们可以将 外部作用域 映射到 内部作用域 。我们已经看到了六种映射到属性的不同方法: = attr &attr @attr = 和 @ 这些作用域映射选项分别做什么? 问题答案: 这可能会造成混淆,但是希望有一个简单的示例可以阐明这一点。首先,让我们将模型绑定与行为分开。 这是一个小提琴,应该有助于将它们联系在一起:http : //jsfiddle.n

  • 问题内容: 我有一个基于JSF 1.2的webapp,从中复制了JSTL导入 您也可以在Internet上的许多地方找到此导入。我不记得是否在我以前的Web项目上合作与否,在任何情况下,它不工作,我目前的JSF 2.0 Web应用基础。我从集装箱收到警告说: 警告:此页面需要使用前缀c声明的XML名称空间http://java.sun.com/jstl/core,但该名称空间不存在标记库。 然后,

  • 我想查询日期范围内的elasticsearch文档。我现在有两个选择,都很适合我。我已经测试了他们两个。1.范围查询2。距离滤波器 因为我现在有一个小数据集,所以无法测试它们的性能。这两者有什么区别?哪一种方法可以更快地检索文档和响应?

  • 问题内容: 好的,所以我使用了很多输入命令,并且我了解在Python2中我可以做到: 但是现在我使用Python 3,我想知道两者之间有什么区别: 和: 我什么时候必须使用一个或另一个? 问题答案: 在Python 3.x中,成为,并删除了Python2.x 。因此,通过在3.x中执行此操作: 您基本上是在2.x中执行此操作: 在3.x中执行以下操作: 与在2.x中执行此操作相同: 以下是Pyth

  • 问题内容: 我设置了一个范围滑块,范围为0-2hr,时间以分钟为单位计算,然后像这样转换为hh:mm:10min,20min,1hr 20min,2hr。 但是现在我正在尝试使用范围滑块指定的范围来过滤一堆项目,而我很难做到这一点。 这是我所做的http://cdpn.io/LDusa 我正在使用http://danielcrisp.github.io/angular- rangeslider/d