【问题标题】:Like multiple DataContexts in WPF, does angularjs support this approach?像 WPF 中的多个 DataContexts 一样,angularjs 是否支持这种方法?
【发布时间】:2016-04-05 13:26:37
【问题描述】:

有时在 WPF(MVVM) 中会发生 UI 控件 (View/Xaml) 有两个 DataContexts,这就是我们在执行绑定表达式时使用 ElementName 属性的原因,因此我们从所需的 DataContext 中选择 Binded 属性。

我的问题是:Angularjs 有这种情况吗?我的意思是同一个 UI 元素(Html 标签)的两个范围或 datacontexts/ng-models(随便)。

【问题讨论】:

  • 一个 WPF 控件如何有两个数据上下文?我已经使用 WPF 将近 10 年了,我从未见过这样的事情。
  • 这种情况有很多场景。 stackoverflow.com/questions/15498890/…。这是其中之一。
  • 这不是一个具有多个数据上下文的控件,而是从另一个控件访问数据上下文。
  • 对不起@GlenThomas。我的意思是 UI 控件(在同一个 XAML、视图中)。

标签: angularjs wpf xaml mvvm data-binding


【解决方案1】:

$scope 变量等效于 .NET DataContext,用于建立相应 HTML 标记中使用的任何数据绑定表达式的根:

function UserController($scope) {
   $scope.currentUser = {
      firstName: "John",
      lastName: "Doe"
   };
}

function DocumentController($scope) {
   $scope.document = {
      title: "My Document",
      pageCount: 123
   };
}

要将某个控制器与 HTML 片段相关联,您必须为其添加 ng-controller 属性以引用所需的控制器。

<div ng-app ng-controller="UserController">
    First Name: <input type=text ng-model="currentUser.firstName"> <br>
    Last Name: <input type=text ng-model="currentUser.lastName"><br>
    Full Name: {{currentUser.firstName}} {{currentUser.lastName}}
</div>

<div ng-app ng-controller="DocumentController">
    Title: <input type=text ng-model="document.Title"> <br>
    Page Count: <input type=text ng-model="document.pageCount"><br>
</div>

【讨论】:

  • 在此示例中,对于 ng-controller 为 DocumentController 的 div,firstName 不可见。在 WPF 中,我们可以使用 Path ElementName 来访问它...... angularjs 呢?
  • 我的理解是你只能访问控制器上的属性,所以也许你可以将你的用户传递给 JavaScript 中的文档控制器以便视图访问它,但不能从HTML
  • 所以在这里我猜我们可以 Xaml 提供比 angularjs 指令更多的选项?对吗?
  • 查看this answer了解一种方法的详细信息,但同样需要一些 JS 工作
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 2018-03-18
  • 2020-05-29
  • 2010-11-20
  • 1970-01-01
相关资源
最近更新 更多