web-dev-qa-db-fra.com

Fonction d'appel dans une autre fonction avec dans le même contrôleur Js angulaire

Je suis novice dans l’utilisation de angularjs et j’ai déclaré deux fonctions dans le contrôleur, et je souhaite maintenant utiliser une fonction dans une autre fonction. Comment puis-je faire cela Signifie que si je dis le nom de la fonction dans une autre fonction, il est dit Undefined.

voici le code: 

'use strict';
angular.module('customer').controller('Controller', ['$scope', '$state', 'Sservice',
  function($scope, $state, Sservice) {

    var that = this;

    (function getDetails() {
        //IMPLEMENTATION
    }());

    this.function2 = function function2 (id){
        //implementation
      getDetails(); // says undefined
    };
  }
]);
8
Naresh k

.controller('SampleController',function($scope){
$scope.funcA = function(){
   $scope.funcB();//scope level function
   funcC(); //non scope level function``
}
$scope.funcB = function(){
}
var funcC = function(){
}
});

12
Rajkumar Rathi

A fonctionné mieux pour moi

var app = angular.module('MyApp', []);
app.controller('MyCtrl',['$scope',function($scope)
 {
$scope.functionA=function(){
alert("Inside functionA")
$scope.functionB(); 	
}; 								 
$scope.functionB=function(){ 	 									
alert("Inside functionB");	 
}
}]);
<!DOCTYPE html>
<html ng-app="MyApp" ng-controller="MyCtrl">
  
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>


<input type="button" value="Click to call functionA" ng-click="functionA()">


</body>
</html>

3
iqbal lone

.controller('SampleController',function($scope){
$scope.funcA = function(){
   $scope.funcB();//scope level function
   funcC(); //non scope level function``
}
$scope.funcB = function(){
}
var funcC = function(){
}
});

2
mohit sharma

Vous rendez les choses complexes. Simplement, fais comme ça

'use strict';
angular.module('customer').controller('Controller', ['$scope', '$state', 'Sservice',
      function($scope, $state, Sservice) {

        function getDetails() {
            //IMPLEMENTATION
        };

        function function2 (id){
            //implementation
          getDetails(); // says undefined
        };
      }
]);
0
Nikhil Aggarwal

Plusieurs exemples de code sont confondus dans votre exemple ci-dessus. Pour commencer, function2 n'est pas déclaré correctement.

Vous avez intégré votre fonction getDetails à ce que l’on appelle une fonction anonyme auto-exécutante . Cela signifie qu'il n'est pas visible pour le code en dehors de l'encapsuleur SEAF, y compris function2. Omettez le wrapper SEAF afin que getDetails soit défini lorsque function2 veut l'utiliser.

Enfin, vous utilisez Angular mais attribuez function2 à this sur le contrôleur. Ce n'est probablement pas ce que vous vouliez faire. les fonctions que vous souhaitez exposer au code HTML doivent être attachées à $scope et non à this.

'use strict';
angular.module('customer').controller('Controller', ['$scope', '$state', 'Sservice',
  function($scope, $state, Sservice) {

    function getDetails() {
        //IMPLEMENTATION
    }

    $scope.function2 = function(id) {
        //implementation
        getDetails();
    };
  }
]);
0
seanhodges

Je ne sais pas ce que vous essayez de faire exactement, mais vous pouvez simplement déclarer vos deux fonctions comme

function getDetails() {
    //IMPLEMENTATION
}

this.function2 = function(id) {
    getDetails(); 
};
0
JB Nizet

Travaille bien pour moi:

{
    // define angular module/app

    var formApp = angular.module('formApp', []);

    // create angular controller and pass in $scope and $http
    function formController($scope, $http) {

        $scope.sitelist = function(){
            $http.get("http://mars.ourgoogle.in/clients/techinfini/customcms/index.php/Ajax/sitelist").then(function(items){    
            console.log(items.data);
            $scope.list = items.data;       
        }); 
    }

    // process the form
    $scope.processForm = function() {
        $http({
            method  : 'POST',
            url     : 'http://mars.ourgoogle.in/clients/techinfini/customcms/index.php/Ajax/angulartest',
            data    : $.param($scope.formData),  // pass in data as strings
            headers : { 'Content-Type': 'application/x-www-form-urlencoded' }  // set the headers so angular passing info as form data (not request payload)
        }).success(function(data) {
                $scope.sitelist();
           }
        }
    }
}
0
Jayesh Neema

My these options below could help

'use strict';
angular.module('customer').controller('Controller', ['$scope', '$state', 'Sservice',
  function($scope, $state, Sservice) {

    function getDetails() {
        //IMPLEMENTATION
    };

    function function2 (id){
        //implementation
      getDetails(); // says undefined
    };
  }
]);


or 

'use strict';
angular.module('customer').controller('Controller', ['$scope', '$state', 'Sservice',
  function($scope, $state, Sservice) {

    $scope.getDetails = function() {
        //IMPLEMENTATION
    };

    $scope.function2 = function(id){
        //implementation
      $scope.getDetails(); // says undefined
    };
  }
]);

0
Kerisnarendra