Javascript AngularJS指令:编译模板和监视范围
我正在Angularjs上编写一个相当复杂的应用程序。这已经够大了,足以把我搞糊涂了。我深入研究,发现我的代码不好。 我理解这个概念:Javascript AngularJS指令:编译模板和监视范围,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我正在Angularjs上编写一个相当复杂的应用程序。这已经够大了,足以把我搞糊涂了。我深入研究,发现我的代码不好。 我理解这个概念: module.directive('createControl', function($compile, $timeout){ scope: { // scope bindings with '=' & '@' },
module.directive('createControl', function($compile, $timeout){
scope: {
// scope bindings with '=' & '@'
},
template: '<div>Template string with binded {{ variables }}</div>',
link: function(scope, element, attrs){
// Function with logic. Should watch scope.
}
module.directive('createControl',函数($compile,$timeout){
范围:{
//具有“=”&“@”的作用域绑定
},
模板:'带绑定{{variables}}的模板字符串',
链接:函数(范围、元素、属性){
//具有逻辑功能。应监视范围。
}
我有几个问题:
- 我的模板很复杂,我有一部分模板是动态链接的
- 我需要将编译后的模板附加到元素,而不是替换
- 与上面的概念,我的模板是没有任何插值附加
module.directive('createControl', function($compile, $timeout){
scope: {
var1: '@var1',
var2: '@var2',
var3: '@var3'
},
template: '<div>{{ var1 }} {{ var3 }}</div>',
link: function(scope, element, attrs){
$('.someelement').on('event', function(){
var2 = 'SNIPPET'; // Need to watch it
});
var3 = '<span>{{ var2 }}</span>';
}
})
module.directive('createControl',函数($compile,$timeout){
范围:{
var1:“@var1”,
var2:“@var2”,
var3:“@var3”
},
模板:{{var1}}{{var3}},
链接:函数(范围、元素、属性){
$('.someelement')。在('event',function()上{
var2='SNIPPET';//需要观看吗
});
var3='{{var2}}';
}
})
我的问题是:
如何使用范围变量编译我的模板?
如何查看范围变量?
我应该将指令一分为二吗?如果应该,如何以正确的方式执行?我想通过以下方式更改您的指令:
module.directive('createControl', function($compile, $timeout){
scope: {
var1: '=var1',
var2: '=var2',
var3: '=var3'
},
template: '<div>{{var1}} {{var3}}</div>',
link: function(scope, element, attrs){
$('.someelement').on('event', function(){
scope.var2 = 'SNIPPET'; // Need to watch it
});
/*I do not see what you want to do*/
scope.var3 = $compile('<span>{{var2}}</span>')(scope);
}
})
module.directive('createControl',函数($compile,$timeout){
范围:{
var1:'=var1',,
var2:'=var2',,
var3:'=var3'
},
模板:{{var1}}{{var3}},
链接:函数(范围、元素、属性){
$('.someelement')。在('event',function()上{
scope.var2='SNIPPET';//需要查看它吗
});
/*我不明白你想做什么*/
scope.var3=$compile({{var2}}')(scope);
}
})
最近几周发布的Angular 1.1.4增加了模板
访问指令中属性的功能:
例如:
app.directive('mytest',function(){
return {
restrict:'E',
template:function( elem,attrs ){
return '<div>'+attrs.a+' '+attrs.b+'</div>';
}
}
});
app.directive('mytest',function(){
返回{
限制:'E',
模板:函数(元素,属性){
返回'+attrs.a+''+attrs.b+'';
}
}
});
请参见如果愿意使用angular 1.4,则添加了允许访问属性@charlietfl的
模板函数
,您是否可以将您的评论作为对代码示例的响应?我是否错了,或者您是否可以避免将jQuery与angular混合使用?请注意,如果我遇到与OP相同的问题,但这只是为我节省了一大堆time感谢您的发帖。我想我应该指出,您为文档添加的链接由于任何原因都无法直接链接到。您必须转到,然后在右上角搜索“指令”。
<mytest a="Hello" b="World"></mytest>