亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AngularJS,路由之間傳遞范圍

AngularJS,路由之間傳遞范圍

寶慕林4294392 2019-12-12 14:04:49
我遇到的情況是表單跨越了幾頁(可能并不理想,但這就是事實)。我想為整個表單提供一個范圍,以便您隨身攜帶,以便用戶在步驟之間來回移動時,很容易記住狀態。所以我需要用非常偽的代碼來做:組 $scope.val = <Some dynamic data>單擊一個鏈接,然后將其路由到新模板(可能使用同一控制器)。$scope.val 仍應與最后一頁上的值相同。是否以某種方式持久保存示波器的數據是解決此問題的正確方法,還是還有其他方法?您是否甚至可以創建一個在路由之間具有持久作用域的控制器,當然除了將其保存在數據庫中。
查看完整描述

3 回答

?
qq_花開花謝_0

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";


    });


查看完整回答
反對 回復 2019-12-12
?
叮當貓咪

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上定義一個函數。否則,如果嘗試直接從子控制器設置父作用域變量,則最終只會在子項本身上創建一個新的作用域變量,從而遮蓋了父變量。


有點難以解釋,對于缺乏完整的示例,我深表歉意。基本上,您需要一個父控制器來建立一個父作用域,該作用域將保留在表單的所有頁面中。


查看完整回答
反對 回復 2019-12-12
?
ITMISS

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"

}


查看完整回答
反對 回復 2019-12-12
  • 3 回答
  • 0 關注
  • 548 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號