angular.js - 怎么在angular初始化时$http为factory赋初值
phpcn_u1582
phpcn_u1582 2017-05-15 16:54:00
0
4
691

因为觉得factory是单例的所以把http结果作为factory的返回值,怎么做到在angular初始化时$http为factory赋初值?
angular.module('some',[]) .factory('factory',function($http){ var some = {}; $http.get('url') .success(function(resp){ some.data = resp; }) return some.data; })
现在类似是这样写的,我就希望angular初始化的时候把从服务器取一些值之后可以一直用

phpcn_u1582
phpcn_u1582

membalas semua(4)
習慣沉默

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);
    });
    
给我你的怀抱

angular.run(fn)

某草草

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...

PHPzhong

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!