Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度动态模板与编译VS模板功能?_Angularjs_Angularjs Directive_Angularjs Compile_Angularjs Templates - Fatal编程技术网

Angularjs 角度动态模板与编译VS模板功能?

Angularjs 角度动态模板与编译VS模板功能?,angularjs,angularjs-directive,angularjs-compile,angularjs-templates,Angularjs,Angularjs Directive,Angularjs Compile,Angularjs Templates,我已经知道:compilevslink(pre/post)vscontroller 假设我有一个简单的代码: HTML 指示 问题 如果是-我应该在什么时候使用模板函数与编译函数 让我试着解释一下到目前为止我所理解的内容 指令是一种以角度处理DOM的机制。它使您可以利用DOM元素及其属性。因此,它还为您提供回调,使您的工作更轻松。 模板、编译和链接就是这些例子。由于您的问题与compile和template有关,因此我还想添加关于link的内容 A)模板 与它的状态类似,它是一组HTML标记或文

我已经知道:
compile
vs
link(pre/post)
vs
controller

假设我有一个简单的代码:

HTML

指示

问题


如果是-我应该在什么时候使用
模板
函数与
编译
函数

让我试着解释一下到目前为止我所理解的内容

指令是一种以角度处理DOM的机制。它使您可以利用DOM元素及其属性。因此,它还为您提供回调,使您的工作更轻松。
模板
编译
链接
就是这些例子。由于您的问题与
compile
template
有关,因此我还想添加关于
link
的内容

A)模板

与它的状态类似,它是一组HTML标记或文件,在DOM上直接表示为指令的外观。 模板可以是具有特定路径的文件,也可以是代码中的内联HTML。就像你上面说的。模板可以包装在函数中,但模板的唯一用途是放置在DOM上的最终HTML集。因为您可以访问元素及其属性,所以在这里也可以执行尽可能多的DOM操作

B)编译

Compile是指令中的一种机制,它编译模板HTML或DOM以对其执行特定操作,并返回最终的HTML集作为模板。就像在DOC中给出的一样

将HTML字符串或DOM编译为模板并生成模板函数,然后可以使用该函数将作用域和模板链接在一起

这清楚地表明,这是模板之上的东西。正如我上面所说的,您也可以在
模板中实现类似的操作,但是当我们有专门用于其目的的方法时,为了最佳实践,您应该使用它们。
您可以在这里阅读更多$compile

C)链接

Link用于注册侦听器,如$watch、$apply等,将模板链接到角度范围,以便它与模块绑定。当您在控制器中放置任何指令时,作用域流通过
链接
,这意味着该作用域可以在链接中直接访问。范围是angular应用程序的唯一功能,因此它使您能够使用实际模型。Link在dom操作中也很有用,可以使用jQlite处理任何dom元素

因此,将以上所有内容集于一身

1。Template是指向指令的DOM或HTML的主要来源。它可以是文件或内联HTML

2。Compile是将HTML编译成最终模板的包装器。它用于收集所有HTML元素和属性,为指令创建模板

3。Link是各种作用域和观察者的侦听器包装器。它将当前控制器的作用域与模板的html绑定,并围绕它进行操作


希望这有助于理解。谢谢你提供了事实。不是什么时候使用什么,尤其是没有回答编译vs模板函数。足够的解释是区分编译和模板
VS
是指两者的目的相同,但它们是不同的实体。虽然你可以在他们中的任何一个身上做类似的事情,但这并不能让他们成为竞争对手。他们的目的各不相同。无论如何我都可以考虑一下!我不同意你的看法。正如我在第一行中所写的:“我已经知道:编译vs链接(pre/post)vs控制器中每个项目的目的是什么”。您提到模板是dom的主要来源,但不像编译函数那样是修改dom的来源。因此,我提出了一个非常具体的问题。我可能没有完全按照你想要的方式回答你的问题,但我希望这能帮助其他人理解周围的事情。这比完全不回答更值得一试。谢谢你的提问!
  <body ng-controller="mainController">
    {{ message }}
    <div otc-dynamic=""></div>
  </body>
app.controller("mainController", function($scope) {
  $scope.label = "Please click";
  $scope.doSomething = function() {
    $scope.message = "Clicked!";
  };

});
app.directive("otcDynamic", function($compile) {

  var template = "<button ng-click='doSomething()'>{{label}}</button>";

  return {

    compile: function(tElement, tAttributes) {
        angular.element(tElement).append(template);
        for (var i = 0; i < 3; i++) {
          angular.element(tElement).append("<br>Repeat " + i + " of {{name}}");
        }

        return function postLink(scope, element, attrs) {
          scope.name = "John";
        }
      }

  }
});
app.directive("otcDynamic", function() {

  var template1 = "<button ng-click='doSomething()'>{{label}}</button>";

  return {
    template: function(element, attr) {
      element.append(template1);
      for (var i = 0; i < 3; i++)
        element.append("<br>Repeat " + i + " of {{name}}");

    },

    link: function(scope, element) {
      scope.name = "John";
    }
  }
});