我们最近从 1.0.8 迁移到 Angular 的最新稳定版本(撰写本文时为 1.2.19)。
他们修复了一个关于孤立作用域的相当讨厌的错误,可惜我们(在不知不觉中)正在利用这个错误。我已经设法修复了我们的应用程序,但现在遇到了(很多)类似“如果这个属性在 $scope 上,那么......”的问题。
我们遇到这些问题是因为我们为 ViewModel 定义了一个通用结构。这意味着使用此结构的指令将在其范围内设置“非唯一”属性。在升级之前,由于该错误,可以从其子级访问隔离范围,但破坏了原型继承。这正是我们的方法奏效的原因。
这是关于我们的应用程序如何工作的非常简化的视图(在新旧 Angular 版本中都有效)
<a-directive-with-scope>
I've put the variable foo on my $scope, see: {{foo}}
<a-directive-with-scope>
I've also put the variable foo on my $scope, see: {{foo}}
</a-directive-with-scope>
</a-directive-with-scope>
现在的问题是,该指令并不总是在 $scope 上设置相同的属性,它取决于从后端返回的内容。因此,假设在内部指令中我想检查该范围是否具有该属性,即使该范围没有该id
属性,它也会返回 true,但他的父级具有该属性。
在 JavaScript 中,您可以使用
if($scope.hasOwnProperty("id")) { ...
但是,是否可以采用相同的方法来修复ngShow
或ngHide
指示?ng-show="id"
由于原型继承(正如我在上面解释的),目前无法工作。