我需要将变量传递给另一个控制器。我有以下与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触发的功能中放置了一个警报,并触发了警报。
但是,当我写这样的函数时:
$scope.changeListName = function(name) {
sharedProperties.setListName(name);
};
它不起作用......它看起来像'sharedProperties.setListName(name);'没有执行...
如果我把它放在具有虚拟名称的函数之外(例如,地铁),它就可以工作..
更新3
我尝试了很多东西,我非常确信问题出在这个功能上:
$scope.changeListName = function(list_name) {
sharedProperties.setListName(list_name);
};
你知道为什么会这样吗?
答案 0 :(得分:103)
你应该使用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,其中讨论了如何使用lungo和angular。另请注意,如果您的页面在浏览到其他链接时完全重新加载,则需要将共享属性保存到localstorage和/或cookie中。
答案 1 :(得分:4)
在角度配置中定义Controller时使用别名。例如: 注意:我在这里使用TypeScript
注意Controller,它有一个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)"
尝试..它可能适合你,因为它对我有用...;)
答案 2 :(得分:3)
我猜你没有得到错误,或者你会提到它们。如果是这种情况,请尝试删除href
属性值,以便在执行代码之前页面不会离开。在Angular中,将href
属性留空是完全可以接受的。
<a href="" data-router="article" ng-click="changeListName('metro')">
此外,我不知道data-router
正在做什么,但如果你仍然没有得到正确的结果,那可能就是原因。