ui-bootstrap模态框作用域错误
ui-bootstrap模态框作用域错误
我注意到ui-bootstrap模态框范围存在一些奇怪的问题。使用ng-model时,似乎必须引用$parent才能访问模态框控制器的作用域。请注意在我的plunker中,其他属性如ng-options不需要$parent:\nhttp://plnkr.co/edit/xGSHz4EkZvGr2D6CUeBz?p=preview\n有什么想法吗?我在这里找到了一个类似的问题:\nScope issues with Angular UI modal\n这让我尝试了$parent的更改,但由于声望不够,我无法在那个线程上发表评论。\n有什么想法为什么作用域似乎会改变吗?\n谢谢!
ui-bootstrap modal scope bug是由于modal有自己的作用域所导致的。当设置"selectedLocation"属性时,该属性会被设置在modal的作用域上而不是你的控制器的作用域上。$parent强制将其设置在控制器的作用域上,但这不是一个好的解决方法,因为这将使你自己局限于某种特定的结构,总是假设modal的父级拥有"model"。
这里有一个修改后的Plunker,使用控制器作用域上的model对象(使用model.selectedLocation)。
http://plnkr.co/edit/B5kZaIA5xi2RediUTBK7?p=preview
无论如何,如果将属性放在类似"$scope.model.selectedLocation"这样的位置,就会改变行为。现在,当我在modal上引用"model.selectedLocation"时,modal的作用域上没有model对象,所以Angular会沿着作用域链向上查找到你的控制器的作用域(该作用域上有model对象)。
观看John Lindquist的这个视频,我认为他可以比我更好地解释它。 🙂