Angular指令compile()函数如何访问隔离的作用域?

狂热的

我有以下指令:

angular.module("example_module", [])
.directive("mydirective", function() {
  return {
    scope: { data: "@mydirective" }
    compile: function(element) {
      element.html('{{example}}');
      return function($scope) {
        $scope.example = $scope.data + "!";
      };
    }
  };
});

以及以下HTML代码:

<!DOCTYPE html>
<html ng-app="example_module">
  <head>
    <meta charset="utf-8">
    <title>Example title</title>
    <script src="lib/angular/angular.min.js"></script>
    <script src="js/example.js"></script>
  </head>
  <body>
    <div mydirective="Hello world"></div>
  </body>
</html>

我希望指令可以编译为Hello world!,但是它可以编译为空字符串。scope创建一个孤立的范围,似乎无法实现{{example}}

我想知道由创建的新HTML代码如何compile()访问链接功能$scope

乔·恩斯明格

这是行不通的,因为{{example}}是针对父作用域进行评估的,这很有意义,因为在编译之前您实际上将元素更改为:

<div>{{example}}<div>

您可以通过将'$ scope.example ='替换为'$ scope。$ parent.example ='来进行验证(仅出于演示目的-使用$ parent不是最佳实践)。

您真正想要做的是类似于包含的操作,但是有很简单的方法可以做到。例如:

angular.module("example_module", [])
.directive("mydirective", function() {
  return {
    restrict: 'A',
    scope: { data: "@mydirective" },
    template: '{{example}}',
    compile: function(element) {
      return function($scope) {
        console.log($scope.data);
        $scope.example = $scope.data + "!";
        console.log($scope.example);
      };
    }
  };
});

使用模板时,它将替换指令所应用的元素的内容(除非使用replace:true,在这种情况下它将替换整个元素),并且模板的内容将根据指令范围进行评估。

您可以使用传递给compile的transclude参数来执行您要尝试执行的操作(请参阅docs),但这已被弃用,因此我不建议您沿这条路走。

这是一个Plunk,您可以在其中玩一些变化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在AngularJS中的自定义指令*中使用自己的作用域*访问父作用域?

在AngularJS中编写指令时,如何确定是否不需要新的作用域,新的子作用域或新的隔离作用域?

如何在Angular中创建与ng-repeat隔离的单独作用域?

AngularJS如何从指令访问Controller作用域

如何从PostgreSQL中的函数访问外部作用域变量?

如何访问作用域函数

从指令中的作用域路径访问模型

如何从链接函数中检查Angular指令中的作用域?

每个独立指令中的作用域是否被隔离且在该指令中是私有的?

如何在没有双向绑定的情况下通过隔离作用域访问对象属性?

AngularjJS指令作用域函数执行

给angular指令指定一个模型名称,以访问其在父级中的作用域

嵌套指令后,如何访问特定的父作用域?

被指令包装后,如何访问其作用域?

如何从一个指令到另一个指令使用隔离的作用域操作

AngularJS指令:将模型引用传递给隔离的作用域

如何正确清理Angular指令的子作用域

访问指令内部的作用域属性

重复指令的angularjs作用域函数

如何在Angular指令中处理多个作用域?

访问指令中的作用域变量

在指令undefined中隔离作用域

在Angular中的链接函数中访问作用域

访问子指令的作用域参数

AngularJS指令作用域函数未调用

如何访问嵌套指令中的作用域?

传递给指令时如何更新Angular作用域属性?

AngularJs 1.6 - 在指令“链接”函数中无法访问父作用域

如何在没有隔离作用域的情况下将变量从指令发送到父控制器