Sam Bush Sam Bush - 3 months ago 14
Javascript Question

AngularJS Proper way to pass variables

I would like to make them global so I can use

[color]
and
[shape]
throughout the whole script. I will need each one to update independently but as I continue to add to the site I am going to need to use both together.
Live preview


  • Example does not work:
    $scope.shapeSelected = response.data[color][shape];

  • Example does work:
    $scope.shapeSelected = response.data.blue[shape];






var app = angular.module("computer", ['ngRoute'])

.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/main', {
controller: 'MainCtrl'
}).
otherwise({
redirectTo: '/main'
})
}])

.controller('MainCtrl', ['$scope', '$http', function($scope, $http) {

$scope.colorType = function(color) {
$http.get('stuff.json').then(function(response) {
$scope.colorSelected = response.data.type[color];

});
}

$scope.shapeType = function(shape) {
$http.get('shapes.json').then(function(response) {
$scope.shapeSelected = response.data[color][shape]; // <--- [color] is not getting pulled in on this function.

var resultsColorShape = $scope.shapeSelected; // <--- I would like to be able to store this incase i need it later.
console.log('resultsColorShape');
});
}

}]);

Answer

You don't have to pass argument to your functions. if you defined ng-model="Color" you can use $scope.Color in your javascript code:

change in html:

ng-change="colorType()"

ng-change="shapeType()"

and js to:

 $scope.colorType = function() {
 $http.get('stuff.json').then(function(response) {
     $scope.colorSelected = response.data.type[$scope.Color];

 });
}

 $scope.shapeType = function() {
     $http.get('shapes.json').then(function(response) {
         $scope.shapeSelected = response.data[$scope.Color][$scope.Shape]; 
     });
 }