通过调用控制器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
在做什么,但如果你还没有得到正确的结果,那可能是为什么。