2016-06-01 19 views
6

Sepete eklenmiş öğeleri saklamak için ngCart yönergesini kullandığım bir uygulamam var. Sorun şu ki, bu yönerge sadece kullanıcı tarafından eklenen öğeler hakkında bilgi gönderme işlevine sahiptir, ancak bir formdan alacağım bazı bilgileri de göndermem gerekir.Açısal JS - Bir yönergeden ana denetleyiciye veri gönderme

Bu yüzden, tek bir nesneye göndermek için önce yönergede saklı olan verileri ana kapsamıma çıkartmam ve sonra formdan aldığım verilerle birleştirmem gerekiyor.

Bunun için ngCart.js yönergesini değiştirmem gerekiyor. here numaralı telefondan hizmet almayı denedim, ancak çalışmayı başaramıyorum. Ben yönergesi eklenen kod

.service('ngCartData', ['ngCart', function(ngCart){ 

    return { 
     data:ngCart; 
    }; 

}]) 

, ama Module 'ngCart' is not available!

ben açısal hizmetler ve fabrikalarda için tamamen yeni söyleyerek bir hata alıyorum, bu yüzden nereye bakmak için tam olarak bilmiyorum çalışmasını sağlamak için. Kodumla plunkr yaptım (yukarıdaki kodla ngCart.js dosyasını değiştirmeyi denedim, ancak plunkr herhangi bir değişiklik yapmadan yönergeyi gösterir). Sadece ana denetleyicide dinleyebilmem için direktifte saklanan verileri ngCart'a gönderebilmem gerekiyor (plunkr'daki ödeme bölümüne bakınız).

Herhangi bir yardım çok takdir edilecektir. Teşekkürler!

<script src="pathto/angular/angular.js"></script> 
<script src="pathto/ngCart.js"></script> or ngCart.min.js 

bu gibi beyan modülünde modülü yüklemek vermedi:

cevap

1

Doğru düşünceniz aklınızdaydı ve sizin için işe yaramadığına şaşırdım.

I (script.js olarak) şu şekilde uygulamanızı düzenledikten

app.controller('myCtrl', function($scope, ngCart, myCart) { 
    $scope.names = [...]; 
    ... 
    console.log(myCart.cart); 
}) 
    .factory('myCart',function(ngCart){ 
     return { 
      cart: ngCart.$cart 
     }; 
}) 

ve ben (o günlüğe önce 2 öğe eklendi) ne gerek olduğunu düşünüyorum {shipping: 30, taxRate: null, tax: null, items: Array[2]}, günlüğe.

Servis eklemenin gereksiz olduğuna dikkat edin; Veriler, ne zaman ve nerede ihtiyacınız varsa erişilebilir. Sadece ngCart'ı kontrol cihazınıza/servisinize/vs'ye enjekte edin. ve güncellenmiş veriler sizin için mevcut olacaktır.

nedenle, aşağıdaki kod eşdeğerdir: ngCart modülünü düzenlerken, o olabilir var hata alıyorum Olası bir neden, siz (bir yazım hatası gibi) hata çeşit vardı

app.controller('myCtrl', function($scope, ngCart) { 
     $scope.names = [...]; 
     ... 
     console.log(ngCart.$cart); 
    }); 

Bu, ngCart'un açısal görünmez olmasına neden oldu.

+0

Ben denedim İkinci seçeneğimiz var ama veriye erişemiyorum (bkz. güncellenmiş plunkr http://plnkr.co/edit/EVduknBjgfMouQDKnv2X?p=preview) Eğer bu şekilde çalışabilirse, bunu işaretleyeceğim Yönerge kodunu değiştirmediği kadar doğru. – Joe82

+0

Neyin tam olarak çalışmadığını bana söyleyebilir misiniz? Bir hata aldın mı? Tanımsız? ... – dror

+0

Checkoutdata.html dosyasını kontrol ederek, {{ngCart.totalCost()}} öğesine erişmeye çalıştığımda, – Joe82

4

böyle js dosyasını yüklemek mi? :

var myApp = angular.module('myApp',['ngCart']); 
+0

yep, sorun sadece ortaya yönerge içinde bit – Joe82

+0

Sadece plunkr düzgün çalışmadığını fark ettim, şimdi çalışmayı görebilirsiniz :) – Joe82

+0

eğer sorunu çözerse lütfen cevabı kabul edin – AlainIb

3

Aslında bunu geri aldınız. Bir yönetime bir yönerge enjekte edemezsiniz. Servisi ana kontrol ünitesine ve direktifin içine enjekte etmelisiniz, böylece ikisi arasında bir köprü olarak kullanabilirsiniz. Hizmetler tekildir, böylece bir hizmetin özelliklerini değiştirirseniz, bu değişiklikler istenirse başka bir yerde kullanılabilir olur.Kumandanızda sonra

.service('ngCartData', [function(){ 

return { 
    data:[], 
    addData: function(newData){ 
     this.data.push(newData); 
    }, 
    getData: function(){ 
     return this.data; 
    } 
}; 

}]) 

ve direktif böyle bir şey olmazdı ki, ngCartData API kullanmak: Hizmetiniz bu gibi bir şey olacaktır Bunu değiştirdiğinizde

$scope.someData = ngCartData.getData(); 
$scope.someFunction = function(dataToStore){ 
    ngCartData.addData(dataToStore); 
}; 
İlgili konular