cari

Rumah  >  Soal Jawab  >  teks badan

angular.js - Bagaimana untuk menetapkan $http kepada nilai awal kilang semasa pemulaan sudut

Oleh kerana saya fikir kilang itu adalah singleton, saya menggunakan hasil http sebagai nilai pulangan kilang. Bagaimanakah saya boleh menetapkan nilai awal kepada kilang dengan $http semasa pemulaan sudut?
angular.module('some',[]) .factory('factory',function($http){ var some = {}; $http.get('url') .success(function(resp){ some.data = resp; }) return some.data; })
Sekarang ia ditulis seperti ini. Saya berharap apabila sudut dimulakan, ia boleh mengambil beberapa nilai dari pelayan dan terus menggunakan

phpcn_u1582phpcn_u15822792 hari yang lalu769

membalas semua(4)saya akan balas

  • 習慣沉默

    習慣沉默2017-05-15 16:56:00

    Saya percaya anda juga telah mendapati bahawa masalah dengan penulisan anda ialah pemerolehan data adalah tidak segerak. some.dataPada mulanya masih undefined. Tetapi intuisi anda betul: data biasa harus diletakkan di dalam factory atau service. Kini untuk menyelesaikan masalah tak segerak, terdapat tiga penyelesaian:

    1. Tukar kepada penyegerakan. Ini ialah penyelesaian yang paling langsung. Data yang diperlukan dipaparkan secara langsung dalam templat pada bahagian pelayan factory mendapatkan data daripada HTML, biasanya menggunakan teg input. Mengikut garis pemikiran ini, cara yang lebih baik ialah menyediakan sumber sebelum memulakan Apl Sudut. Anda boleh merujuk artikel ini: http://harttle.github.io/2015/05/31/angular-scope-initialize.html#1

    2. Panggil balik tak segerak. Gunakan factory untuk mengembalikan fungsi panggil balik, seperti ini:

      javascriptxxx.factory('some', function($http){
          var some = {}
          function get(cb){       
              if(some.data) return cb(some.data);     
              $http.get('').success(function(d){
                  cb(some.data = d);
              });
          }
          return get;
      });
      ...
      some.get(function(data){
          console.log(data);
      });
      
    3. Gunakan mod Promise/Deffered untuk operasi tak segerak. Apabila projek menjadi semakin kompleks, Janji adalah penyelesaian muktamad. Angular menyediakan pelaksanaan corak ini $q, iaitu Perkhidmatan, dan $http.get akan mengembalikan contoh Promise. Digunakan seperti ini:

      javascriptxxx.factory('some', function($q, $http){
          return $http.get('');
      });    
      ...
      some.success(function(data){
          console.log(data);
      });
      

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-15 16:56:00

    angular.run(fn)

    balas
    0
  • 某草草

    某草草2017-05-15 16:56:00

    angularjs $http tidak menyokong pemerolehan segerak

    Ingin memulakan atau mengeluarkan respons.tulis dari hujung belakang ke hujung hadapan
    Atau gunakan penyekatan ajax jquery untuk mendapatkan data dan kemudian mulakan sudut
    Untuk penghalaan, anda boleh menggunakan resolusi untuk menyuntik pengawal

    http://stackoverflow.com/questions/16286605/initialize-angularjs-servi...

    balas
    0
  • PHPz

    PHPz2017-05-15 16:56:00

    Terdapat beribu-ribu kaedah permulaan yang penting bukanlah sama ada nilai yang anda inginkan diperoleh secara serentak atau tidak segerak, tetapi di mana dan bila anda menggunakannya? Orientasi matlamat menentukan kaedah yang anda gunakan untuk permulaan. Sudah tentu menggunakan janji disyorkan dalam kebanyakan kes.

    balas
    0
  • Batalbalas