javascript - Angular Controller 可以绑定(bind)到网页的多个部分吗?

标签 javascript html angularjs angularjs-controller

假设我编写了一个网页,要求用户在表单中键入数据。假设页面有两个部分在 DOM 中完全独立,但逻辑上相关。我需要将它们绑定(bind)到一个模型。

我能想到的第一个(糟糕的)解决方案是完全重构页面,以便绑定(bind)到模型的所有内容都包含在单个 <div> 中。元素(或者甚至可能将 Controller 放在 <body> 元素上)。

另一种解决方案可能是将输入绑定(bind)到一个对象,该对象可以成为两个不同 Controller 的成员,但这听起来有点困惑。

假设 HTML 如下所示:

<input ng-model='data1' />
<div>
    <!-- something complicated -->
</div>
<input ng-model='data2' />

最佳答案

您可以创建共享服务并将其注入(inject)到两个 Controller 中。这可以通过工厂服务模式来实现。请参阅SO帖子angular.service vs angular.factory了解两者之间的差异/相似之处。

这是 Angular 的方式来做到这一点。请参阅AngularJS services docs了解更多信息。一个简单的例子可能包括...

<div ng-app="app">
    <div ng-controller="ctrlA"></div>
    <div ng-controller="ctrlB"></div>
</div>

app.service('sharedService', [function () {
    this.someValue = 'yo!'
}]);

app.controller('ctrlB', ['$scope', 'sharedService', function($scope, sharedService) {
    console.log(sharedService.someValue) // yo!
}]);

app.controller('ctrlA', ['$scope', 'sharedService', function($scope, sharedService) {
    console.log(sharedService.someValue) // yo!
}]);

JSFiddle Link

关于javascript - Angular Controller 可以绑定(bind)到网页的多个部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30518309/

相关文章:

css - 是否有任何脚本/站点可以找到 Divs 的 z-index

php - echo php 代码 - 如何做到这一点

javascript - AngularJS 不再在 Firebug 控制台中显示特定错误

javascript - 比较两个数组

javascript - 如何在单击时将 li 元素添加到另一个容器,而 li 的其余部分保持固定

html - Fixed Div 中的链接不可点击?

angularjs - 使用来自另一个模块的子 Controller

javascript - 使用 Angular 的 $http 通过 GET 请求将对象数组发送到 Java Spring

javascript - Lightbox2 下一个箭头在组的第一个图像之后消失

javascript - 通用 JSON 对象