将 $scope 传递给另一个 $controller(在 AngularJS 中使用 Google 图表)
passing $scope to another $controller (using Google Charts in AngularJS)
我是 AngularJS 的新手。我正在编写一个政治测验。一切正常,但我无法将值包含在 Google 图表中。
我读到我可以使用 "services" 将范围传递给另一个控制器,但它不起作用。
这是代码
var aritmetica = angular.module('aritmetica', ['ngAnimate']);
aritmetica.factory("contadoreco",function(){
return {};
});
aritmetica.factory("contadorsoc",function(){
return {};
});
aritmetica.controller('encuestaController', ['$scope', function($scope,contadoreco,contadorsoc) {
$scope.contadoreco= 0;
$scope.contadorsoc= 0;
$scope.pageClass = 'encuesta';
$scope.sumareco = function(cantidad) { $scope.contadoreco += cantidad};
$scope.restareco = function(cantidad) { $scope.contadoreco -= cantidad};
$scope.sumarsoc = function(cantidad) { $scope.contadorsoc += cantidad};
$scope.restarsoc = function(cantidad) { $scope.contadorsoc -= cantidad};
}]);
aritmetica.controller('MyCtrl', function($scope,contadoreco,contadorsoc) {
$scope.name = "Name"
});
aritmetica.directive('chart', function($scope,contadoreco,contadorsoc) {
return {
restrict: 'A',
link: function($scope, $elm, $attr) {
// Create the data table.
var data = google.visualization.arrayToDataTable([
['Económico', 'Social'],
[$scope.contadoreco, $scope.contadorsoc]
]);
var options = {
title: 'Age of sugar maples vs. trunk diameter, in inches',
hAxis: {title: 'Económico', minValue: -130, maxValue: 130},
vAxis: {title: 'Social', minValue: -130, maxValue: 130},
legend: 'none',
width: 400,
height:400,
};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.ScatterChart($elm[0]);
chart.draw(data, options);
}
}
});
google.setOnLoadCallback(function() {
angular.bootstrap(document.body, ['myApp']);
});
google.load('visualization', '1', {packages: ['corechart']});
好吧,我看到的一个问题是您没有将服务正确定义为依赖项。你错过了字符串 'contadoreco', 'contadorsoc'
所以它们不会被注入你的控制器。应该是这样的:
aritmetica.controller('encuestaController', ['$scope', 'contadoreco', 'contadorsoc', function($scope, contadoreco, contadorsoc) {
// etc...
}]);
有两种不同的方式来注入依赖项。就像我在上面发布的或您在此处所做的那样:
aritmetica.controller('MyCtrl', function($scope, contadoreco, contadorsoc) {
});
如果代码被缩小,第二个将不起作用,第一个可以。
从控制器中的任何地方将范围传递给服务。
确保注入服务。
controllersModule.controller('MyCtrl', function($scope, $filter, $http, $compile, ngTableParams, **FactoryYouwant**)
{
**FactoryYouwant**.getdata($scope.**scopeYoutwantTopass**).then (function(responseData){
var ResponseFromServer =responseData.data;
}
在役
controllersModule.factory('**FactoryYouwant**, function($http) {
var responseData = null;
return {
getdata : function(**data**){ (you dont have to use $)
responseData = $http.post or whatever actually gets you data;
return responseData;
}
};
});
希望对您有所帮助。
我是 AngularJS 的新手。我正在编写一个政治测验。一切正常,但我无法将值包含在 Google 图表中。
我读到我可以使用 "services" 将范围传递给另一个控制器,但它不起作用。
这是代码
var aritmetica = angular.module('aritmetica', ['ngAnimate']);
aritmetica.factory("contadoreco",function(){
return {};
});
aritmetica.factory("contadorsoc",function(){
return {};
});
aritmetica.controller('encuestaController', ['$scope', function($scope,contadoreco,contadorsoc) {
$scope.contadoreco= 0;
$scope.contadorsoc= 0;
$scope.pageClass = 'encuesta';
$scope.sumareco = function(cantidad) { $scope.contadoreco += cantidad};
$scope.restareco = function(cantidad) { $scope.contadoreco -= cantidad};
$scope.sumarsoc = function(cantidad) { $scope.contadorsoc += cantidad};
$scope.restarsoc = function(cantidad) { $scope.contadorsoc -= cantidad};
}]);
aritmetica.controller('MyCtrl', function($scope,contadoreco,contadorsoc) {
$scope.name = "Name"
});
aritmetica.directive('chart', function($scope,contadoreco,contadorsoc) {
return {
restrict: 'A',
link: function($scope, $elm, $attr) {
// Create the data table.
var data = google.visualization.arrayToDataTable([
['Económico', 'Social'],
[$scope.contadoreco, $scope.contadorsoc]
]);
var options = {
title: 'Age of sugar maples vs. trunk diameter, in inches',
hAxis: {title: 'Económico', minValue: -130, maxValue: 130},
vAxis: {title: 'Social', minValue: -130, maxValue: 130},
legend: 'none',
width: 400,
height:400,
};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.ScatterChart($elm[0]);
chart.draw(data, options);
}
}
});
google.setOnLoadCallback(function() {
angular.bootstrap(document.body, ['myApp']);
});
google.load('visualization', '1', {packages: ['corechart']});
好吧,我看到的一个问题是您没有将服务正确定义为依赖项。你错过了字符串 'contadoreco', 'contadorsoc'
所以它们不会被注入你的控制器。应该是这样的:
aritmetica.controller('encuestaController', ['$scope', 'contadoreco', 'contadorsoc', function($scope, contadoreco, contadorsoc) {
// etc...
}]);
有两种不同的方式来注入依赖项。就像我在上面发布的或您在此处所做的那样:
aritmetica.controller('MyCtrl', function($scope, contadoreco, contadorsoc) {
});
如果代码被缩小,第二个将不起作用,第一个可以。
从控制器中的任何地方将范围传递给服务。 确保注入服务。
controllersModule.controller('MyCtrl', function($scope, $filter, $http, $compile, ngTableParams, **FactoryYouwant**)
{
**FactoryYouwant**.getdata($scope.**scopeYoutwantTopass**).then (function(responseData){
var ResponseFromServer =responseData.data;
}
在役
controllersModule.factory('**FactoryYouwant**, function($http) {
var responseData = null;
return {
getdata : function(**data**){ (you dont have to use $)
responseData = $http.post or whatever actually gets you data;
return responseData;
}
};
});
希望对您有所帮助。