通过调用控制器function不能正常工作的angular度ng-click

我需要将一个variables传递给另一个控制器。 我有以下与ListCtrl相关的代码:

<a href="#items" data-router="article" ng-click="changeListName('metro')"> 

该链接将去到另一个控制器,ItemCtrl。

我想将一个variables传递给ItemCtrl。 我想过使用一个名为SharedProperties的服务:

 service('sharedProperties', function () { var list_name = ''; return { getListName: function() { return list_name; }, setListName: function(name) { list_name = name; } }; }); 

当点击链接时,我会调用一个angular度点击事件来触发以下function:

 $scope.changeListName = function(name) { sharedProperties.setListName(name); }; 

但是,ng-click似乎并没有改变我的共享属性的值…

UPDATE

我在由ng-click触发的函数内部放置一个警报,并且触发警报,因为它应该是。

但是,当我写这样的function:

 $scope.changeListName = function(name) { sharedProperties.setListName(name); }; 

它不工作…它看起来像“sharedProperties.setListName(name);” 不执行…

如果我把它放在具有虚拟名称(例如metro)的函数之外,它可以工作。

更新3

我尝试了很多东西,而且我相当确信问题出在这个函数上:

 $scope.changeListName = function(list_name) { sharedProperties.setListName(list_name); }; 

你有什么想法,为什么发生这种情况?

您应该使用ngHref指令和ngClick:

  <a ng-href='#here' ng-click='go()' >click me</a> 

这是一个例子: http : //plnkr.co/edit/FSH0tP0YBFeGwjIhKBSx?p=preview

 <body ng-controller="MainCtrl"> <p>Hello {{name}}!</p> {{msg}} <a ng-href='#here' ng-click='go()' >click me</a> <div style='height:1000px'> <a id='here'></a> </div> <h1>here</h1> </body> var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.name = 'World'; $scope.go = function() { $scope.msg = 'clicked'; } }); 

我不知道这是否会与你正在使用的库,但至less可以让你链接和使用ngClick函数。

**更新**

这是一个集合的演示,并得到良好的服务工作。

http://plnkr.co/edit/FSH0tP0YBFeGwjIhKBSx?p=preview

 var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope, sharedProperties) { $scope.name = 'World'; $scope.go = function(item) { sharedProperties.setListName(item); } $scope.getItem = function() { $scope.msg = sharedProperties.getListName(); } }); app.service('sharedProperties', function () { var list_name = ''; return { getListName: function() { return list_name; }, setListName: function(name) { list_name = name; } }; }); 

*编辑*

请查看https://github.com/centralway/lungo-angular-bridge ,其中介绍了如何使用lungo和angular。 另外请注意,如果您的网页在浏览到其他链接时完全重新加载,则需要将共享属性保存到本地存储和/或Cookie中。

在angular度configuration中定义Controller时使用别名。 例如:注意:我在这里使用TypeScript

只要注意控制器,它有一个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'); }]); } 

这是使用它的方法

 ng-click="homeCtrl.addCustomer(customer)" 

试试吧,它可能适合你,因为它为我工作…;)

我会猜测你没有得到错误,或者你会提到他们。 如果是这种情况,请尝试删除href属性值,以便在您的代码执行之前,页面不会离开。 在Angular中,将href属性留空是完全可以接受的。

 <a href="" data-router="article" ng-click="changeListName('metro')"> 

我也不知道data-router在做什么,但如果你还没有得到正确的结果,那可能是为什么。