2

我们最近从 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")) { ...

但是,是否可以采用相同的方法来修复ngShowngHide指示?ng-show="id"由于原型继承(正如我在上面解释的),目前无法工作。

4

0 回答 0