3 回答
TA贡献1835条经验 获得超7个赞
您需要使用服务,因为服务会在您的应用程序的整个生命周期中持续存在。
假设您要保存与用户有关的数据
这是您定义服务的方式:
app.factory("user",function(){
return {};
});
在第一个控制器中:
app.controller( "RegistrationPage1Controller",function($scope,user){
$scope.user = user;
// and then set values on the object
$scope.user.firstname = "John";
$scope.user.secondname = "Smith";
});
app.controller( "RegistrationSecondPageController",function($scope,user){
$scope.user = user;
// and then set values on the object
$scope.user.address = "1, Mars";
});
TA贡献1776条经验 获得超12个赞
该服务将起作用,但是仅使用普通作用域和控制器来实现此服务的逻辑方法是设置控制器和元素,以使其反映模型的结构。特别是,您需要一个父元素和一个建立父作用域的控制器。表单的各个页面应位于作为父级的子级的视图中。即使更新子视图,父范围也将保留。
我假设您正在使用ui-router,以便可以嵌套嵌套的命名视图。然后用伪代码:
<div ng-controller="WizardController">
<div name="stepView" ui-view/>
</div>
然后,WizardController定义您要在多页表单的各个步骤中保留的范围变量(我将其称为“向导”)。然后,您的路线只会更新stepView。每个步骤可以具有自己的模板,控制器和范围,但是它们的范围在页面之间丢失。但是WizardController中的作用域保留在所有页面中。
要从子控制器中更新WizardController范围,您将需要为每个范围变量使用类似的语法$scope.$parent.myProp = 'value'或setMyProp在WizardController上定义一个函数。否则,如果尝试直接从子控制器设置父作用域变量,则最终只会在子项本身上创建一个新的作用域变量,从而遮盖了父变量。
有点难以解释,对于缺乏完整的示例,我深表歉意。基本上,您需要一个父控制器来建立一个父作用域,该作用域将保留在表单的所有页面中。
TA贡献1871条经验 获得超8个赞
数据可以通过两种方式在控制器之间传递
$rootScope
模型
下面的示例演示了使用模型传递值
app.js
angular.module('testApp')
.controller('Controller', Controller)
.controller('ControllerTwo', ControllerTwo)
.factory('SharedService', SharedService);
SharedService.js
function SharedService($rootScope){
return{
objA: "value1",
objB: "value2"
}
}
//修改控制器A中的值
Controller.js
function Controller($scope, SharedService){
$scope.SharedService = SharedService;
$scope.SharedService.objA = "value1 modified";
}
//访问controllertwo中的值
ControllerTwo.js
function ControllerTwo($scope, SharedService){
$scope.SharedService = SharedService;
console.log("$scope.SharedService.objA"+$scope.SharedService.objA); // Prints "value1 modified"
}
- 3 回答
- 0 关注
- 517 浏览
添加回答
举报