J'ai une question sur la façon dont nous pouvons transmettre des données d'un composant à un autre sans $ scope ou $ rootScope mais quelque chose de similaire à Angular (2/4). Supposons que j'ai trois composants:transmettre des données à partir de composants de même niveau dans AngularJS
- rootComponent: Point d'entrée de l'application
- phoneListComponent: Afficher la liste des téléphones
- phoneDetailComponent: Afficher les détails du téléphone sélectionné
source rootComponent code:
'use strict';
angular.module('phonecatApp').
component('appRoot', {
templateUrl: 'app-root.template.html',
controller: [
function appRootController(){
var self = this;
}
]
});
phoneListCode source:
'use strict';
// Register `phoneList` component, along with its associated controller and template
angular.module('phoneList').component('phoneList', {
//Note: the URL is relative to our 'index.html' file
templateUrl: 'phone-list/phone-list.template.html',
controller: [
function PhoneListController() {
var self = this;
self.phones = [
{
"name": "Huawei P9 lite",
"description": "This is one hell of a phone",
"price": "250€"
},
{
"name": "Samsung S8",
"description": "Great phone but really expensive",
"price": "700€"
}
]
self.select = function(phone){
self.selected=phone;
}
}
]
});
phoneDetailComponent code source:
'use strict';
angular.module('phoneDetail').
component('phoneDetail', {
templateUrl: 'phone-detail/phone-detail.template.html',
bindings: {
selected: '<'
},
controller: [
function phoneDetailController(){
var self = this;
}
],
});
Vous pouvez voir que chaque composant est déclaré dans son propre module et module phoneList et module phoneDetail sont enregistrés dans Module phoneCatApp.
Étant donné que les composants ont leurs propres étendues isolées, je ne peux pas passer l'attribut sélectionné de phoneList à phoneDetail. Quelles sont les solutions possibles sachant que je cherche un couplage lâche et pas $ scope ou $ rootScope? StackOverflow m'a déjà vu cette réponse here mais il me semble que mes modules ne fonctionneront pas s'il n'y a pas un parent qui orchestre au-dessus d'eux, ce qui peut ne pas toujours être le cas.
Merci
Vous pouvez définir un service et l'injecter dans les deux composants. De cette façon, vous pouvez définir des méthodes communes liées à la gestion du tableau 'phones'. Alternativement, vous pouvez injecter '$ rootScope' et stocker' phones' comme '$ rootScope.phones'. –