Ich habe eine Schaltfläche, box.component.js:Scope Wert empfängt Update nur von einem Controller
angular.module('box').component('box', {
templateUrl: 'box.template.html',
controller: function boxController(mainService, UiService){
this.addBox = function() {
//Set box as selected
var box = mainService.selected;
var nodesHolder = UiService.getNodesHolder().children;
//Set custom properties
box.name = "Box";
box.id = nodesHolder.length;
box.parameters = {
parm1: Math.floor((Math.random() * 10) + 1),
parm2: Math.floor((Math.random() * 10) + 1),
parm3: Math.floor((Math.random() * 10) + 1)
};
//Push box into nodes holder array
nodesHolder.push(box);
}
}
});
, wenn darauf geklickt es ein Objekt erstellt, die ein Feld auffüllt, mein list.component.js: (in der Ansicht als Kreise dargestellt):
angular.module('list').component('list', {
templateUrl: 'list.template.html',
controller: function nodesController(UiService) {
this.nodes = UiService.getNodesHolder().children;
this.selected = function (value) {
var nodes = UiService.getNodesHolder();
UiService.selected = nodes.children[value];
}
}
});
und zeigt auch den Namen und die Parameter, durch parms-bar.component:
0.123.angular.module('parms-bar').component('parmsbar', {
templateUrl: 'parms-bar.template.html',
controller: function parmsController(mainService){
this.selected = mainService.selected;
}
});
Die Kommunikation zwischen diesen Komponenten wird von zwei Diensten verwaltet. Eine, die das gewählte Objekt erfasst, main.service.js:
angular.module('app').service('mainService', function(){
var selected = {};
var service = {
get selected(){
return selected;
},
set selected(value){
selected = value;
}
}
return service;
});
und eine, die die Elemente in der Liste (der Kreise) zurück, ui.service.js:
angular.module('app').service('UiService', function(){
//Nodes-holder
var nodesHolder = { children: []};
return {
getNodesHolder: function() {
return nodesHolder;
}
};
});
Wenn ich auf einen Kreis klicke, möchte ich zu dem entsprechenden Objekt wechseln, also zeige seine Parameter an, aber das funktioniert nicht. Es scheint, dass die Parameteransicht nur vom Box-Controller aktualisiert wird. Vielleicht etwas falsch in meinem list.component.js
, wo ich versuche, den Kreis als ausgewählt zu setzen?
this.selected = function (value) {
var nodes = UiService.getNodesHolder();
UiService.selected = nodes.children[value];
}
Herumspielen mit dem Beispiel (hat einen 'console.log (Wert)' an ausgewählte) Egal, auf welchen Kreis Sie klicken, die ID ist gleich – Vasseurth
@Vasseurth - Das stimmt. Eigentlich gibt es mir in meinem ursprünglichen Projekt die richtige ID, es aktualisiert die Ansicht einfach nicht. Ich habe etwas vermasselt, das versucht, das Problem zu extrapolieren, um ein Beispiel zu geben. Ich werde versuchen, es zu beheben – leota