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 關注
- 548 瀏覽
添加回答
舉報