SORU
5 HAZİRAN 2013, ÇARŞAMBA


AngularJS: fabrika $http.JSON dosya almak

Yerel olarak sadece JSON kodlanmış bir dosya ile geliştirmek için arıyorum. JSON dosyası aşağıdaki gibi geçerli JSON doğrulayıcı içine koyduğunuzda ():

{

    "contentItem": [


        {

            "contentID" : "1", 
                            "contentVideo" : "file.mov",
                            "contentThumbnail" : "url.jpg",
                            "contentRating" : "5",
            "contentTitle" : "Guitar Lessons",
            "username" : "Username", "realname" : "Real name",
            "contentTags" : [
                { "tag" : "Guitar"},
                { "tag" : "Intermediate"},
                { "tag" : "Chords"}
            ],      
            "contentAbout" : "Learn how to play guitar!",
            "contentTime" : [
                { "" : "", "" : "", "" : "", "" : ""},
                { "" : "", "" : "", "" : "", "" : ""}
            ],          
            "series" :[
                { "seriesVideo" : "file.mov", "seriesThumbnail" : "url.jpg", "seriesTime" : "time", "seriesNumber" : "1", "seriesTitle" : "How to Play Guitar" },
                { "videoFile" : "file.mov", "seriesThumbnail" : "url.jpg", "seriesTime" : "time", "seriesNumber" : "2", "seriesTitle" : "How to Play Guitar" }
            ]
        },


        {

            "contentID" : "2", 
                            "contentVideo" : "file.mov",
                            "contentThumbnail" : "url.jpg",
                            "contentRating" : "5",
            "contentTitle" : "Guitar Lessons",
            "username" : "Username", "realname" : "Real name",
            "contentTags" : [
                { "tag" : "Guitar"},
                { "tag" : "Intermediate"},
                { "tag" : "Chords"}
            ],      
            "contentAbout" : "Learn how to play guitar!",
            "contentTime" : [
                { "" : "", "" : "", "" : "", "" : ""},
                { "" : "", "" : "", "" : "", "" : ""}
            ],          
            "series" :[
                { "seriesVideo" : "file.mov", "seriesThumbnail" : "url.jpg", "seriesTime" : "time", "seriesNumber" : "1", "seriesTitle" : "How to Play Guitar" },
                { "videoFile" : "file.mov", "seriesThumbnail" : "url.jpg", "seriesTime" : "time", "seriesNumber" : "2", "seriesTitle" : "How to Play Guitar" }
            ]
        }

    ]

}

Kontrolör, fabrika, ve benim html JSON fabrika içinde kodlanmış olduğu zaman çalışma fırsatım oldu. Ancak, şimdi bu http dolar ile JSON değiştirdim.alın kod çalışmıyor. Hem $http dolar kaynak ama nereye emin değil, çok farklı örnekler gördüm. En basit çözüm arıyorum. Sadece ng-repeat ve benzeri direktifler için veri çekmeye çalışıyorum.

Fabrika:

theApp.factory('mainInfoFactory', function($http) { 

    var mainInfo = $http.get('content.json').success(function(response) {
        return response.data;
    });

    var factory = {}; // define factory object

    factory.getMainInfo = function() { // define method on factory object

        return mainInfo; // returning data that was pulled in $http call

    };

    return factory; // returning factory to make it ready to be pulled by the controller

});

Her türlü yardım için teşekkür ederiz. Teşekkürler!

CEVAP
5 HAZİRAN 2013, ÇARŞAMBA


Tamam, burada şeylerin bir listesini içine bakmak

1) Eğer herhangi bir Web sunucusu çalıştıran ve sadece test için değil file://index.html o zaman muhtemelen aynı kökenli politika konuları dalıyorsun. Bkz:

http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy

Pek çok tarayıcı, dosyaları yerel olarak barındırılan yerel olarak barındırılan diğer dosyalara erişmek için izin vermez. Firefox buna izin vermiyor, ama tek dosya html dosyası (veya alt) aynı klasör içinde bulunan dolduruyorsun.

2) başarı fonksiyonu $http döndü.() zaten sonucu senin için nesne böler:

$http({method: 'GET', url: '/someUrl'}).success(function(data, status, headers, config) {

Gereksiz fonksiyon(yanıt) ile başarı ve yanıt verilecek.veri.

3) başarı işlevinin geçiş işlevi bir sonuç vermez, bu sizce ne yapmaz ki:

var mainInfo = $http.get('content.json').success(function(response) {
        return response.data;
    });

Bu, sizin istediğiniz daha yakın

var mainInfo = null;
$http.get('content.json').success(function(data) {
    mainInfo = data;
});

4) Ama asıl yapmak istediğim böyle bir şeyi bu kadar veri yüklediğinde doldurulan bir özellik, bir nesneye bir başvuru döndürür

theApp.factory('mainInfo', function($http) { 

    var obj = {content:null};

    $http.get('content.json').success(function(data) {
        // you can do some processing here
        obj.content = data;
    });    

    return obj;    
});

mainİnfo.içeriği boş başlayacak ve veri yüklediğinde, işaret eder.

Alternatif olarak gerçek söz http dolar iade edebilirsiniz.döner alın ve bunu kullanın:

theApp.factory('mainInfo', function($http) { 
    return $http.get('content.json');
});

Ve sonra zaman uyumsuz olarak bir kontrolör hesaplamaları: değerini kullanabilirsiniz

$scope.foo = "Hello World";
mainInfo.success(function(data) { 
    $scope.foo = "Hello " data.contentItem[0].username;
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • RayperEnglishKnight

    RayperEnglis

    24 Kasım 2008
  • TopOfTheTech

    TopOfTheTech

    5 NİSAN 2010
  • Visual Life

    Visual Life

    3 Temmuz 2006