cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Angular menggunakan siaran dan seterusnya untuk melompat ke halaman dan memindahkan data, tetapi tiada data diterima selepas lompatan.

Saya menggunakan $broadcast dan $on dalam Angular untuk melompat ke halaman dan memindahkan data, tetapi data tidak boleh diterima selepas lompatan (ia hanya akan dipaparkan apabila butang diklik semula)
Keperluan khusus: klik butang pada halaman pertama, Hantar tatasusunan (susunan shopList dalam gambar di bawah) ke halaman kedua supaya halaman kedua boleh menerima tatasusunan shopList

Halaman pertama

<a ui-sref="app.checkOut" ng-click="checkoutShop(shopList)"><b>结算</b></a>

Pengawal sepadan (pengawal-ibu bapa utama)

$rootScope.checkoutShop=function(shop){  
    var shop_list_data = shop;
    console.log(shop_list_data);
    $rootScope.$broadcast('to_checkout', shop_list_data);
};

Pengawal halaman kedua (subset di bawah pengawal utama)

$scope.$on('to_checkout', function(event,data) {  
    console.log(data);
});

Tetapi selepas ujian, didapati console.log(data) halaman kedua gagal dicetak, tetapi ia berjaya apabila diklik semula. Adakah ia masalah penghalaan? Butirannya adalah seperti berikut:
Halaman utama adalah seperti berikut Troli beli-belah disembunyikan di sebelah Klik troli beli-belah dalam bar navigasi dan troli beli-belah akan muncul di sebelah kanan

Baru bermula:


Selepas mengklik butang, tatasusunan diluluskan dan melompat ke halaman lain, tetapi tatasusunan tidak dicetak:


Klik butang "Checkout" sekali lagi dan ia akan mencetak:


Apakah sebabnya? Bagaimana untuk menyelesaikannya?

高洛峰高洛峰2785 hari yang lalu780

membalas semua(3)saya akan balas

  • 世界只因有你

    世界只因有你2017-05-15 17:16:25

    Alih keluar ui-sref="app.checkOut", laksanakan $broadcast dahulu dalam kaedah, dan kemudian halakan lompatan.

    <a ng-click="checkoutShop(shopList)"><b>结算</b></a>
    
    $rootScope.checkoutShop=function(shop){  
        var shop_list_data = shop;
        console.log(shop_list_data);
        $rootScope.$broadcast('to_checkout', shop_list_data);
        $state.go('app.checkOut');
    };

    balas
    0
  • 大家讲道理

    大家讲道理2017-05-15 17:16:25

    Mengapa menambah acara klik di bawah rootScope? Cuma tambahkannya terus pada skop halaman dan lihat.

    balas
    0
  • phpcn_u1582

    phpcn_u15822017-05-15 17:16:25

    $state.go boleh lulus parameter terus apabila melompat ke halaman, mengapa menggunakan $broadcast

    Induk Pengawal - Ibu Bapa

    `$rootScope.checkoutShop=function(shop){  
        var shop_list_data = shop;
        console.log(shop_list_data);
        $state.go(app.checkOut,{data:shop_list_data});
    };`
    

    Subset di bawah pengawal utama

    .controller('XXXX', ['$rootScope', '$scope', '$stateParams',
        function($rootScope, $scope, $stateParams) {
            console.log($stateParams.data);
        }])

    balas
    0
  • Batalbalas