Javascript Can指令';如果为false,则为s范围创建新对象和函数。
我对Angularjs中的指令有些陌生 在研究指令中的作用域时,我发现它们可以以三种形式声明,Javascript Can指令';如果为false,则为s范围创建新对象和函数。,javascript,angularjs,angular-directive,Javascript,Angularjs,Angular Directive,我对Angularjs中的指令有些陌生 在研究指令中的作用域时,我发现它们可以以三种形式声明,scope:false(共享作用域),scope:true(继承作用域),scope:{}(隔离作用域) 指令('smsDownloadSampleFile',函数(){ 返回{ 限制:'E', 范围:假, 模板:“”, 链接:功能(范围、元素、属性){ scope.getSampleFile=function(){ //log(“获取样本文件”); } DS=$scope; } } }) 所以我创建
scope:false(共享作用域)
,scope:true(继承作用域)
,scope:{}(隔离作用域)
指令('smsDownloadSampleFile',函数(){
返回{
限制:'E',
范围:假,
模板:“”,
链接:功能(范围、元素、属性){
scope.getSampleFile=function(){
//log(“获取样本文件”);
}
DS=$scope;
}
}
})
所以我创建了这个指令,但是我无法在父范围中访问这个方法getSampleFile
。据我所知,当scope=false
时,它不会创建新的作用域,而是共享父作用域。如果是这样的话,为什么我不能在父范围中访问该方法
请帮助我澄清这个疑问并学习一些新知识。使用
scope:false
指令接收与父指令完全相同的scope对象。因此,当您执行以下操作时,将覆盖父级上的函数:
scope.getSampleFile=function() { ... }
通常建议使用隔离作用域,因为这样您必须显式地将数据传递到指令中,并且父级不能被覆盖(除非您特意这样做)。您不是在重新定义函数吗?没有,先生。这是一个新函数。但是如果您与父函数共享相同的确切作用域,您不是在父函数上覆盖了该函数吗?如果你有
scope:true
你将创建一个新函数,父函数上的函数将仍然存在。无论如何,你最好使用独立的作用域,这样就不会对父函数上存在的内容进行任何假设(所有内容都会传入)。这就是我想知道的,先生,是否允许childscope在共享作用域时创建新对象或函数。?是的,先生,我知道我可以覆盖父作用域中已创建的对象和函数。但是我可以在chidlscope中创建新的对象和函数吗?这些对象和函数在父作用域中还没有出现,并且会反映在父作用域中吗?是的,它们是完全相同的对象(但您可能不应该这样做)
scope.getSampleFile=function() { ... }