AngularJS- 如何在 ng-click() 上将数据从一个控制器传递到另一个控制器?
AngularJS- How to pass data from one controller to another on ng-click()?
所以我试图在点击事件时在两个控制器之间共享数据。我的代码如下:
控制器
function userTypeController($scope, $location, CategoryService) {
let vm=this;
vm.getCat=function(){
CategoryService.getCategories() .then(function (response)
{
$scope.categories=response.data.data.categories;
$scope.index = 0;
$scope.array = [];
for(var i=0; i<$scope.categories.length/2;i++)
$scope.array.push(i);
});
$location.path('/category');
};
};
在我的 html 控制器中说,我有一个调用 getCat 函数的按钮。
<md-button md-whiteframe="8" ng-click="utCtrl.getCat()">Submit<md-button>
在我的类别服务中,我有一个 returns 类别列表的功能。
服务
return {
getCategories: function () {
return $http.get(url2);
}
现在我希望我的类别控制器可以访问从服务器获取的类别数组。我之前使用 $rootScope 将日期从用户类型控制器共享到另一个控制器,但这不是理想的做法。我希望 $scope.array 可以在我的类别控制器中访问,这样我就可以在它的视图中显示它。什么是最好的方法来做到这一点。非常感谢!
在这种情况下,您应该考虑使用服务在您的控制器之间共享数据。
SharedService.js
app.service('sharedService', function(){
var categories = [];
names.add = function(incategories){
categories = incategories;
};
names.get = function(){
return categories;
};
});
然后注入你的controller1和controller2,根据你的需要使用。
app.controller("TestCtrl",
function($scope,sharedService) {
$scope.categories =[];
$scope.save= function(){
sharedService.add(yourcat);
}
}
);
然后用作,
app.controller("TestCtrl2",
function($scope,sharedService) {
$scope.getcategories = function(){
$scope.categories = sharedService.get();
}
}
);
这将立即为您提供结果,无需服务或任何东西,您也可以为多个控制器使用 $broadcast :
<div ng-app="myApp" ng-controller="myCtrl">
<button ng-click="sendData();"></button>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($rootScope, $http) {
function sendData() {
var arrayData = [1,2,3];
$rootScope.$emit('eventName', arrayData);
}
});
app.controller('yourCtrl', function($rootScope, $http) {
$rootScope.$on('eventName', function(event, data) {
console.log(data);
});
});
</script>
所以我试图在点击事件时在两个控制器之间共享数据。我的代码如下:
控制器
function userTypeController($scope, $location, CategoryService) {
let vm=this;
vm.getCat=function(){
CategoryService.getCategories() .then(function (response)
{
$scope.categories=response.data.data.categories;
$scope.index = 0;
$scope.array = [];
for(var i=0; i<$scope.categories.length/2;i++)
$scope.array.push(i);
});
$location.path('/category');
};
};
在我的 html 控制器中说,我有一个调用 getCat 函数的按钮。
<md-button md-whiteframe="8" ng-click="utCtrl.getCat()">Submit<md-button>
在我的类别服务中,我有一个 returns 类别列表的功能。
服务
return {
getCategories: function () {
return $http.get(url2);
}
现在我希望我的类别控制器可以访问从服务器获取的类别数组。我之前使用 $rootScope 将日期从用户类型控制器共享到另一个控制器,但这不是理想的做法。我希望 $scope.array 可以在我的类别控制器中访问,这样我就可以在它的视图中显示它。什么是最好的方法来做到这一点。非常感谢!
在这种情况下,您应该考虑使用服务在您的控制器之间共享数据。
SharedService.js
app.service('sharedService', function(){
var categories = [];
names.add = function(incategories){
categories = incategories;
};
names.get = function(){
return categories;
};
});
然后注入你的controller1和controller2,根据你的需要使用。
app.controller("TestCtrl",
function($scope,sharedService) {
$scope.categories =[];
$scope.save= function(){
sharedService.add(yourcat);
}
}
);
然后用作,
app.controller("TestCtrl2",
function($scope,sharedService) {
$scope.getcategories = function(){
$scope.categories = sharedService.get();
}
}
);
这将立即为您提供结果,无需服务或任何东西,您也可以为多个控制器使用 $broadcast :
<div ng-app="myApp" ng-controller="myCtrl">
<button ng-click="sendData();"></button>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($rootScope, $http) {
function sendData() {
var arrayData = [1,2,3];
$rootScope.$emit('eventName', arrayData);
}
});
app.controller('yourCtrl', function($rootScope, $http) {
$rootScope.$on('eventName', function(event, data) {
console.log(data);
});
});
</script>