Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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
Javascript AngularJS指令:编译模板和监视范围_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript AngularJS指令:编译模板和监视范围

Javascript AngularJS指令:编译模板和监视范围,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我正在Angularjs上编写一个相当复杂的应用程序。这已经够大了,足以把我搞糊涂了。我深入研究,发现我的代码不好。 我理解这个概念: module.directive('createControl', function($compile, $timeout){ scope: { // scope bindings with '=' & '@' },

我正在Angularjs上编写一个相当复杂的应用程序。这已经够大了,足以把我搞糊涂了。我深入研究,发现我的代码不好。 我理解这个概念:

 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>