この記事の例では、Angular JS ページ間で値を切り替えて転送する方法を共有します。具体的な内容は次のとおりです。 Angular JS ページ間で値を切り替えて転送する
1. on ui-router
(1) AngularJS の app.js でルートを定義するには、ui-router を使用します。たとえば、1 つのページ (Producers.html) に複数のプロデューサーが配置されます。対応するプロデューサーのページにジャンプします。同時に、productionId パラメータを渡します。
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-の$stateを使用します)。 router .go インターフェイス):
.controller('ProducersCtrl', function ($scope, $state) { $scope.toProducer = function (producerId) { $state.go('producer', {producerId: producerId}); }; });
(3)ProducerCtrl で、ui-router の $stateParams を介してパラメータ生産者 ID を取得します。例:
.controller('ProducerCtrl', function ($scope, $state, $stateParams) { var producerId = $stateParams.producerId; });
2。 transfer
を参照してください。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) 例: ネストされたビューは 1 つのページで定義されており、すべてのサブスコープで特定のパラメーターの変更を監視し、対応するアクションを実行する必要があります。たとえば、地図アプリケーションでは、住所を入力した後、input 要素を定義し、同時に別の州のリストにその周囲の店舗に関する情報を表示する必要があります。現時点では、複数の $scope がアドレスの変更を監視しています。
追記: $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. ベースlocalStorage または 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 中国語 Web サイト (www.php.cn) に注目してください。