Ich muss eine Variable an einen anderen Controller übergeben. Ich habe den folgenden Code, der sich auf ListCtrl bezieht:
<a href="#items" data-router="article" ng-click="changeListName('metro')">
Der Link führt zu einem anderen Controller, ItemCtrl.
Ich möchte eine Variable an die ItemCtrl übergeben. Ich dachte daran, einen Dienst namens SharedProperties zu verwenden:
service('sharedProperties', function () {
var list_name = '';
return {
getListName: function() {
return list_name;
},
setListName: function(name) {
list_name = name;
}
};
});
Wenn auf den Link geklickt wird, rufe ich ein Winkelklickereignis auf, um die folgende Funktion auszulösen:
$scope.changeListName = function(name) {
sharedProperties.setListName(name);
};
Der Klick auf ng scheint jedoch den Wert meiner freigegebenen Eigenschaft nicht zu ändern ...
AKTUALISIEREN
Ich habe eine Warnung in die durch ng-click ausgelöste Funktion eingefügt und die Warnung wird ausgelöst, wie es sein sollte.
Wenn ich meine Funktion jedoch so schreibe:
$scope.changeListName = function(name) {
sharedProperties.setListName(name);
};
Es funktioniert nicht ... es sieht aus wie 'sharedProperties.setListName (name);' wird nicht ausgeführt ...
Wenn ich es mit einem Dummy-Namen (z. B. Metro) außerhalb der Funktion platziere, funktioniert es.
UPDATE 3
Ich habe mehrere Dinge ausprobiert und bin ziemlich sicher, dass das Problem bei dieser Funktion liegt:
$scope.changeListName = function(list_name) {
sharedProperties.setListName(list_name);
};
Haben Sie eine Idee, warum dies geschieht?
ng-ref
undhref
,ng-click
ausgelöst wird und feuert meine Funktion. Ich habe meine Antwort aktualisiert, um mein Problem besser widerzuspiegeln.Verwenden Sie einen Alias, wenn Sie Controller in Ihrer Winkelkonfiguration definieren. Zum Beispiel: HINWEIS: Ich verwende hier TypeScript
Beachten Sie einfach den Controller, er hat einen Alias von homeCtrl.
module MongoAngular { var app = angular.module('mongoAngular', ['ngResource', 'ngRoute','restangular']); app.config([ '$routeProvider', ($routeProvider: ng.route.IRouteProvider) => { $routeProvider .when('/Home', { templateUrl: '/PartialViews/Home/home.html', controller: 'HomeController as homeCtrl' }) .otherwise({ redirectTo: '/Home' }); }]) .config(['RestangularProvider', (restangularProvider: restangular.IProvider) => { restangularProvider.setBaseUrl('/api'); }]); }
Und hier ist die Möglichkeit, es zu verwenden ...
ng-click="homeCtrl.addCustomer(customer)"
Probieren Sie es aus .. Es könnte für Sie funktionieren, wie es für mich funktioniert hat ...;)
quelle
Ich gehe davon aus, dass Sie keine Fehler erhalten oder diese erwähnt hätten. Wenn dies der Fall ist, entfernen Sie den
href
Attributwert, damit die Seite nicht weg navigiert, bevor Ihr Code ausgeführt wird. In Angular ist es durchaus akzeptabel,href
Attribute leer zu lassen.<a href="" data-router="article" ng-click="changeListName('metro')">
Ich weiß auch nicht, was ich tue
data-router
, aber wenn Sie immer noch nicht das richtige Ergebnis erzielen, könnte dies der Grund sein.quelle