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+中)可以完成这项工作。