我需要将变量传递给另一个控制器。我有以下与ListCtrl相关的代码:
<a href="#items" data-router="article" ng-click="changeListName('metro')">
链接将转到另一个控制器ItemCtrl。
我想将变量传递给ItemCtrl。我想到了使用一个名为SharedProperties的服务:
service('sharedProperties', function () { var list_name = ''; return { getListName: function() { return list_name; }, setListName: function(name) { list_name = name; } }; });
单击链接后,我将调用角度单击事件以触发以下功能:
$scope.changeListName = function(name) { sharedProperties.setListName(name); };
但是,ng-click似乎并没有改变我共享属性的值…
更新
我在ng-click触发的函数中放置了一个警报,并且警报应该被触发。
但是,当我这样编写函数时:
它不起作用…看起来像是“ 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'; } });
我不知道这是否可以与您正在使用的库一起使用,但至少可以让您链接和使用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,其中讨论了如何使用隆胸和角度。另请注意,如果在浏览到另一个链接时页面完全重新加载,则需要将共享属性持久存储在localstorage和/或cookie中。