>php教程 >PHP开发 >Angular 페이지와 값 전달 사이를 전환하는 4가지 방법

Angular 페이지와 값 전달 사이를 전환하는 4가지 방법

高洛峰
高洛峰원래의
2016-12-07 15:46:171476검색

본 글의 예시에서는 참고용으로 Angular JS 페이지 간 전환 및 값 전달 방법을 공유합니다.

1 . ui-router 전송 매개변수를 기반으로 한 페이지 이동
(1) AngularJS의 app.js에서 경로를 정의하려면 이제 한 페이지(producers.html)에 여러 생산자를 배치합니다. 대상 중 하나에서 페이지가 해당 생산자 페이지로 이동하여 producerId 매개변수를 전달합니다.

state('producers', {
 url: '/producers',
 templateUrl: 'views/producers.html',
 controller: 'ProducersCtrl'
})
.state('producer', {
 url: '/producer/:producerId',
 templateUrl: 'views/producer.html',
 controller: 'ProducerCtrl'
})


(2) producers.html에서 클릭 이벤트를 정의합니다(예: ng-click="toProducer(producerId)", ProducersCtrl에서 페이지 점프 기능을 정의합니다(ui-router의 $state.go 인터페이스 사용):

.controller('ProducersCtrl', function ($scope, $state) {
 $scope.toProducer = function (producerId) {
  $state.go('producer', {producerId: producerId});
 };
});


(3) ProducerCtrl 에서 ui-router의 $stateParams를 통해 producerId 매개변수를 가져옵니다. 예:

.controller('ProducerCtrl', function ($scope, $state, $stateParams) {
 var producerId = $stateParams.producerId;
});


2. 공장 기반 페이지 점프 매개변수

예: N개의 페이지가 있고 각 페이지에는 사용자가 정보를 입력해야 하며 최종적으로 제출할 마지막 페이지로 사용자를 안내하는 동시에 후자 페이지에 정보가 표시되어야 합니다. 모든 이전 페이지에서 채워졌습니다. 현재로서는 팩토리를 사용하여 매개변수를 전달하는 것이 더 합리적인 선택입니다(다음 코드는 단순화된 버전이므로 필요에 따라 사용자 정의할 수 있습니다).

.factory('myFactory', function () {
 //定义factory返回对象
 var myServices = {};
 //定义参数对象
 var myObject = {};
  
 /**
  * 定义传递数据的set函数
  * @param {type} xxx
  * @returns {*}
  * @private
  */
 var _set = function (data) {
  myObject = data; 
 };
 
 /**
  * 定义获取数据的get函数
  * @param {type} xxx
  * @returns {*}
  * @private
  */
 var _get = function () {
  return myObject;
 };
 
 // Public APIs
 myServices.set = _set;
 myServices.get = _get;
  
 // 在controller中通过调set()和get()方法可实现提交或获取参数的功能
 return myServices;
  
});


3. 팩토리 및 $rootScope.$broadcast()를 기반으로 매개변수 전달

(1) 예: 중첩된 뷰는 단일 페이지에 정의되며 모든 뷰를 원합니다. 특정 매개변수의 변경을 수신하고 해당 조치를 취하는 하위 범위. 예를 들어, 지도 애플리케이션에서 입력 요소는 특정 $state에 정의되어 있으며, 주소를 입력한 후 지도의 위치를 ​​지정하는 동시에 다른 상태의 목록에 주변 상점에 대한 정보가 표시되어야 합니다. 현재 여러 $scope가 주소 변경을 모니터링하고 있습니다.
PS: $rootScope.$broadcast()는 전역 이벤트를 설정하고 모든 하위 범위에서 이를 수신하도록 하는 데 매우 편리할 수 있습니다.

.factory('addressFactory', ['$rootScope', function ($rootScope) {
 // 定义所要返回的地址对象
 var address = {};
  
 // 定义components数组,数组包括街道,城市,国家等
 address.components = [];
 
 // 定义更新地址函数,通过$rootScope.$broadcast()设置全局事件'AddressUpdated'
 // 所有子作用域都能监听到该事件
 address.updateAddress = function (value) {
 this.components = value.slice();
 $rootScope.$broadcast('AddressUpdated');
 };
  
 // 返回地址对象
 return address;
}]);


(2) 주소를 얻는 컨트롤러에서:

// 动态获取地址,接口方法省略
var component = {
 addressLongName: xxxx,
 addressShortName: xxxx,
 cityLongName: xxxx,
 cityShortName: xxxx  
};
 
// 定义地址数组
$scope.components = [];
 
$scope.$watch('components', function () {
 // 将component对象推入$scope.components数组
 components.push(component);
 // 更新addressFactory中的components
 addressFactory.updateAddress(components);
});


(3) 주소 변경을 모니터링하는 컨트롤러에서:

// 通过addressFactory中定义的全局事件'AddressUpdated'监听地址变化
$scope.$on('AddressUpdated', function () {
 // 监听地址变化并获取相应数据
 var street = address.components[0].addressLongName;
 var city = address.components[0].cityLongName;
 
 // 通过获取的地址数据可以做相关操作,譬如获取该地址周边的商铺,下面代码为本人虚构
 shopFactory.getShops(street, city).then(function (data) {
  if(data.status === 200){
   $scope.shops = data.shops;
  }else{
   $log.error('对不起,获取该位置周边商铺数据出错: ', data);
  }
 });
});


4. sessionStorage 페이지 점프 매개변수 전송

참고: LS 또는 SS를 통해 매개변수를 전송할 때 변수를 모니터링해야 합니다. 그렇지 않으면 매개변수가 변경될 때 변수를 얻는 끝이 업데이트되지 않습니다. AngularJS에는 gsklee/ngStorage · GitHub, grevory/angular-local-storage · GitHub와 같이 사용할 수 있는 미리 만들어진 WebStorage 종속성이 있습니다. 다음은 ngStorage를 사용하여 매개변수 전달 프로세스를 간략하게 설명합니다.

(1) localStorage에 매개변수 업로드 - 컨트롤러 A

// 定义并初始化localStorage中的counter属性
$scope.$storage = $localStorage.$default({
 counter: 0
});
 
// 假设某个factory(此例暂且命名为counterFactory)中的updateCounter()方法
// 可以用于更新参数counter
counterFactory.updateCounter().then(function (data) {
 // 将新的counter值上传到localStorage中
 $scope.$storage.counter = data.counter;
});


(2) localStorage의 매개변수 변경 모니터링 - 컨트롤러 B

$scope.counter = $localStorage.counter;
$scope.$watch('counter', function(newVal, oldVal) {
 // 监听变化,并获取参数的最新值
 $log.log('newVal: ', newVal);
});

위는 Angular 페이지 간 전환과 값 전달의 4가지 방법에 대한 내용입니다. 관련 내용 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.