Javascript 从指令中的编译函数访问控制器

Javascript 从指令中的编译函数访问控制器,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-controlleras,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Controlleras,我已经搜索了所有地方,唯一能想到的是我不了解编译函数如何工作的一些基本知识 这是我的 angular.module("app", []) .directive("foo", function(){ return { scope: {}, controller: function() { this.someValue = 23; }, contollerAs: "ctrl", compile: function(tElem, tAttrs)

我已经搜索了所有地方,唯一能想到的是我不了解编译函数如何工作的一些基本知识

这是我的

angular.module("app", [])
.directive("foo", function(){
  return {
    scope: {},
    controller: function() {
      this.someValue = 23;
    },
    contollerAs: "ctrl",
    compile: function(tElem, tAttrs) {
      tElem.html("<h1>Data:  {{ctrl.someValue}}</h1>");
    },
    template: '<h1>test</h1>'
  }
});
角度模块(“应用程序”,[]) .指令(“foo”,函数(){ 返回{ 作用域:{}, 控制器:函数(){ this.someValue=23; }, 康托莱拉斯:“ctrl”, 编译:功能(TELM、tAttrs){ html(“数据:{ctrl.someValue}}”); }, 模板:“测试” } }); 这将显示:数据:,并且似乎看不到“someValue”变量。 然而,当我使用scope而不是controllerAs语法时,它是有效的

//this works fine
angular.module("app", [])
.directive("foo", function(){
  return {
    scope: {},
    controller: function($scope) {
      $scope.someValue = 23;
    },
    contollerAs: "ctrl",
    compile: function(tElem, tAttrs) {
      tElem.html("<h1>Data:  {{someValue}}</h1>");
    },
    template: '<h1>test</h1>'
  }
});
//这很好用
角度模块(“应用程序”,[])
.指令(“foo”,函数(){
返回{
作用域:{},
控制器:功能($scope){
$scope.someValue=23;
},
康托莱拉斯:“ctrl”,
编译:功能(TELM、tAttrs){
html(“数据:{{someValue}}”);
},
模板:“测试”
}
});
这将显示:数据:23

这里有我遗漏的东西吗?我是否正确使用了compile?
手册似乎没有那么有用。

因为有一个打字错误。它是
controllerAs
,而不是
contollerAs


建议使用而不是编译
。这使得将来升级到组件更容易,也避免了问题-
compile
如果没有虚拟的
test
模板,上述指令中的
将无法正常工作。

Wow,完全尴尬。我简直不敢相信,在盯着那段代码看了两个小时后,我竟然没有看到!如果可能的话,您能解释一下编译函数的目的是什么吗。如果link、controller和template处理好了所有的事情,那么它将被用来做什么呢。它是否有使用案例?这是一个品味和实际关注的问题。
compile
的目的是修改模板并返回预链接和/或后链接功能。我相信它在
template
函数之前就已经存在了,并且由于历史原因而保留了下来。通常,
模板
控制器
和/或链接函数($onInit和$postLink控制器挂钩在1.5+中)可以完成这项工作。