2015-06-05 22 views
6

Tôi mới sử dụng angularjs và tôi đã khai báo hai hàm trong bộ điều khiển, và bây giờ tôi muốn sử dụng một hàm vào một hàm khác như thế nào tôi có thể làm điều đó tôi nói tên chức năng vào một chức năng khác nó nói Undefined.Chức năng gọi vào chức năng khác trong cùng một bộ điều khiển Angular Js

đây là mã:

'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 
    }; 
    } 
]); 
+1

tôi chỉ wan để biết làm thế nào để gọi một chức năng bên trong chức năng khác trong bộ điều khiển cùng –

+0

'chức năng một() {b(); } '. –

+0

tôi đã thêm mã vào câu hỏi của tôi, bạn có thể kiểm tra và cho tôi biết tôi đã đi sai không? –

Trả lời

9

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

+0

nhưng chức năng của tôi đang không ở trong $ phạm vi –

+0

bạn có thể chia sẻ các cấu trúc điều khiển –

0

Tôi không biết những gì bạn đang cố gắng để đạt được một cách chính xác, nhưng bạn chỉ có thể tuyên bố hai chức năng của bạn như

function getDetails() { 
    //IMPLEMENTATION 
} 

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

getDetails là hàm toàn cục nó sẽ thực hiện khi điều khiển được nạp function2 là thực hiện khi người dùng nhấp vào nút tôi muốn thực hiện getDetails chức năng khi người dùng nhấp vào nút tức là tôi muốn gọi getDetails trong function2 tôi đã thử cùng một logic mà bạn dán ở trên nhưng nó nói không xác định –

+0

Không, getDetail() không phải là một hàm toàn cầu. Nó chỉ hiển thị từ chức năng điều khiển.Và function2() sẽ gọi nó nếu bạn khai báo nó như tôi đã làm trong câu trả lời của tôi. Đăng mã được cập nhật trong câu hỏi của bạn, đăng tất cả các mã có liên quan khác và đăng thông báo lỗi đầy đủ và chính xác mà bạn nhận được. –

0

Bạn đang làm mọi thứ phức tạp. Đơn giản, làm như thế này

'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

bạn không hiểu những gì tôi đang yêu cầu cho \t getDetails là chức năng toàn cầu mà nó sẽ thực thi khi bộ điều khiển được tải hàm 2 được thực hiện khi người dùng nhấp vào nút tôi muốn thực hiện hàm getDetails khi người dùng nhấp vào nút tức là tôi muốn gọi getDetails trong function2 –

+0

'getDetails' sẽ được khai báo (không phải toàn cục, riêng trong bộ điều khiển) và sẽ không được gọi cho đến khi bạn gọi hàm' function2'. – seanhodges

+0

Nếu sự hiểu biết của tôi là chính xác - Bạn có thể gọi getDetails() tại thời điểm thực hiện bộ điều khiển và cũng khi hàm2 được gọi. Vui lòng xác nhận – nikhil

0

Một số vùng mã bị nhầm lẫn trong ví dụ trên. Để bắt đầu, function2 không được khai báo đúng cách.

Bạn đã bọc chức năng getDetails của mình vào cái được gọi là self-executing anonymous function. Điều này có nghĩa là mã không hiển thị bên ngoài trình bao bọc SEAF, bao gồm function2. Bỏ qua trình bao bọc SEAF để getDetails được định nghĩa khi function2 muốn sử dụng nó.

Cuối cùng, bạn đang sử dụng Góc nhưng gán function2 thành this trên bộ điều khiển. Đây có lẽ không phải là điều bạn muốn làm; các hàm bạn muốn hiển thị với HTML phải được đính kèm vào $scope, không phải this.

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

    function getDetails() { 
     //IMPLEMENTATION 
    } 

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

Làm việc tốt nhất cho tôi

var app = angular.module('MyApp', []); 
 
app.controller('MyCtrl',['$scope',function($scope) 
 
{ 
 
$scope.functionA=function(){ 
 
alert("Inside functionA") 
 
$scope.functionB(); \t 
 
}; \t \t \t \t \t \t \t \t 
 
$scope.functionB=function(){ \t \t \t \t \t \t \t \t \t \t 
 
alert("Inside functionB"); \t 
 
} 
 
}]);
<!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>

0

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

tốt làm việc cho tôi:

{ 
    // 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(); 
      } 
     } 
    } 
} 
1

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

Các vấn đề liên quan