Ich bin neu in einem Projekt und versuche, ein kleines Feature hinzuzufügen.Eckdaten zwischen Controllern und Komponenten
Ich habe 2 Ansichten, Cars.html
und Wheels.html
hat Cars.html einen Controller Cars.controller.js
Wheels.html eine Komponente Wheels.component.js
Ich möchte, zwischen diesen beiden Steuerungen kommunizieren. Ich habe versucht, sie direkt ineinander zu injizieren, aber das verursacht eine Menge "Provider-Fehler".
Durch Forschung online, scheint es, wie ich einen ‚Dienst‘ müssen die von meinem Controller und Komponente injiziert wird ... dann kann ich Funktionsaufrufe zwischen den beiden machen. Dadurch werden die Providerfehler behoben, aber ich kann nicht auf die howDoIgetHere
-Funktion zugreifen. Hier
ist, wie sie aussehen:
Cars.controller.js
angular.module('Cars')
.controller('CarsCtrl', CarsCtrl);
CarsCtrl.$inject = ['PartsViewModel'];
function CarsCtrl(PartsViewModel) {
var ctrl = this;
// This will fail
ctrl.goToParts = PartsViewModel.howDoIgetHere();
};
Wheels.component.js
angular.module('Cars')
.component('wheels', {
bindings: { wheel: '=' },
controller: 'WheelsCtrl',
templateUrl: 'path/to/component/Cars/Wheels/Wheels.component.html'
})
.controller('WheelsCtrl', WheelsCtrl);
WheelsCtrl.$inject = [];
function WheelsCtrl() {
var ctrl = this;
// This will fail
ctrl.goToParts = PartsViewModel.howDoIgetHere();
}
PartsViewModel.service.js
angular.module('Cars')
.factory('PartsViewModel', partsViewModelFactory);
partsViewModelFactory.$inject = ['Some', 'injected', 'Dependencies'];
function partsViewModelFactory(Some, injected, Dependencies) {
return PartsViewModel;
function PartsViewModel(part) {
this.howDoIgetHere = function() {
console.log('Success! From Cars controller or Wheels component.')
};
}
}
Cars.html
<div>
<button ng-click="ctrl.goToParts()"></button>
</div>
Wheels.html
<div>
<button ng-click="$ctrl.goToParts()"></button>
</div>
'ctrl' ist ein Verweis auf' this' in meinem Controller, so dass das nicht das Problem ist. Das Entfernen der Klammer nach 'howDoIgetHere()' bewirkt nichts. Halte es, gibt mir den Fehler: "PartsViewModel.howDoIgetHere() ist keine Funktion". – bruh
Ich habe das verstanden. Es gibt keinen Unterschied in beide Richtungen. Und indem Sie die Klammer in der Eingabe lassen, setzen Sie ctrl.goToParts auf den Rückgabewert der Funktion. – charliebeckwith
Oh interessant. Also sollte ich eigentlich die Klammern entfernen? Wenn ja, wie rufe ich die Funktion ohne die Klammer auf? – bruh