ng模型跨多个控制器或视图
ng-model across multiple controllers or views
想象一下,我的导航栏在导航栏控制器上,而我正在另一个控制器中进行值操作,我如何更新我的导航条的值?
下面是我创建的一个小例子来表达我的问题
http://jsfiddle.net/zmw43zdp/
<div ng-app="app">
<div ng-controller="ctrl">
{{number}}
<br><button ng-click="increment()">Increment</button>
</div>
<br>
<br>
<div ng-controller="ctrl2">
{{number || 0}}
</div>
</div>
angular.module("app", [])
.controller("ctrl", ["$scope", function($scope){
$scope.number = 1;
$scope.increment = function(){
$scope.number++;
}
}])
.controller("ctrl2", ["$scope", function($scope){
}]);
我想更新ctrl2控制器的{{number}}。
在之间共享数据的干净方式总是使用Angular Service。这是我根据你的例子修改的代码。基本上
- 您将要共享的真正数据保存在Service实例中
- 哪一个是singleton,那么您就制作setter和getter以及增量服务中的功能
- 然后删除本地的$scope.number来自两个控制器
- 您无法将数据绑定到控制器到服务中的数据,但您可以绑定getter方法转换为$scope,这样您就可以在中调用getter方法视图
angular.module("app", [])
.factory("sharedModelService", function() {
var model = this;
var number = 0;
model.initNumber = function(value) {
return number = value;
}
model.getNumber = function() {
return number;
}
model.increment = function() {
return ++number;
}
return model;
})
.controller("ctrl", ["$scope", "sharedModelService", function($scope, sharedModelService) {
sharedModelService.initNumber(1);
$scope.getNumber = sharedModelService.getNumber;
$scope.increment = function() {
sharedModelService.increment();
}
}])
.controller("ctrl2", ["$scope", "sharedModelService", function($scope, sharedModelService) {
$scope.getNumber = sharedModelService.getNumber;
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="ctrl">
{{getNumber()}}
<br>
<button ng-click="increment()">Increment</button>
</div>
<br>
<br>
<div ng-controller="ctrl2">
{{getNumber() || 0}}
</div>
</div>
因此,您希望在控制器中共享成员。事实上,有不同的方法可以实现这一点,但我建议创建一个如下的父控制器:
angular.module("app", [])
.controller("parent", ["$scope", function($scope){
$scope.number = 0;
}]
.controller("ctrl", ["$scope", function($scope){
$scope.number = 1;
$scope.increment = function(){
$scope.number++;
}
}])
.controller("ctrl2", ["$scope", function($scope){
$scope.number= 1;
}]);
以及在html:中
<div ng-app="app" ng-controller="parent">
<div ng-controller="ctrl">
{{number}}
<br><button ng-click="increment()">Increment</button>
</div>
<br>
<br>
<div ng-controller="ctrl2">
{{number || 0}}
</div>
</div>
我相信这是一种干净整洁的方式。
相关文章:
- 如何在Jquery中发布后将值从视图返回到控制器
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 重定向(URl)提供控制器视图 URI模式
- AngularJS - 在服务内部对数组进行排序,在控制器/视图中保留绑定
- 控制器视图上下文中的 dom 元素
- 创建新模型的正确控制器/视图模式是什么
- 强制路由实例化新的控制器/视图对,而不是更改模型
- AngularJS,通过引用更新子控制器视图中的ng repeat
- 如何在控制器视图中将ViewBag值包含到javascript中
- 如何使控制器/视图特定的Javascript在Rails3.1生产环境中工作
- AngularJS方式:通过通知功能扩展控制器/视图
- Angular Js中的newbie - link会在控制器视图中触发另一个控制器动作
- 如何将用户选择从一个控制器视图发送到另一个
- ASP.. NET MVC控制器/视图显示本地时间
- 将数据从javaScript传递到MVC控制器视图ajax
- 从ng-click angular的控制器视图中使用数据
- 烬.js页头作为控制器/视图
- 重构Rails控制器/视图以调用Javascript/jQuery
- 在EmberJS中向嵌套的控制器/视图发送数据
- Emberjs:正确绑定模型/控制器/视图与夹具数据