功能不在angularjs中工作

时间:2017-10-07 07:11:39

标签: javascript angularjs

.controller("selectStudentController",function($scope,$http){
    $scope.showStudents = function(){
        $http.post("selectStudent.php").then(function(response){
            $scope.studentData = response.data;
        })
    }
})
.controller("saveStudentController",function($scope,$http){
    $scope.saveIt = function(){
        $http.post("saveNewStudent.php", {"sName" : $scope.sName,
                                          "gender" : $scope.gender,
                                          "salary" : $scope.salary,
                                          "dob" : $scope.dob}
        ).then(function(response){                            
            alert("Record Saved Successfully...");  
            $scope.showStudents();                            
        })                        
    }                   
})

嗨,这是我的代码。在这里,当我在记录保存成功... 消息后呼叫$scope.showStudents();时无效。任何人都可以告诉我它里面的错误是什么。我的记录保存并选择正常,但我无法调用此功能。

2 个答案:

答案 0 :(得分:2)

您有2个控制器selectStudentControllersaveStudentController

假设selectStudentController不是saveStudentController父作用域(否则您的代码应该有效)

您无法直接从本地控制其他控制器的方法。

最佳做法是使用service。将方法showStudents逻辑放入可从两个控制器获得的服务中。

app.service('YourService', ['$http', function ($http) {

    var self = this;

    self.showStudents = function(){
        return $http.post(
             "selectStudent.php"
          ).then(function(response){
               return response.data;
          })
       }    
  }]);

现在saveStudentController看起来像是:

.controller("saveStudentController",function($rootScope, $scope,$http,YourService){
                   $scope.saveIt = function(){
                        $http.post("saveNewStudent.php",
                        {"sName":$scope.sName,
                        "gender" : $scope.gender,
                        "salary" : $scope.salary,
                        "dob" : $scope.dob
                        }                                                                
                    ).then(function(response){                            
                        alert("Record Saved Successfully...");  
                        $rootScope.$broadcast('showStudents', {});
                    })                        
                }                   
            })

selectStudentController控制器:

 .controller("selectStudentController",function($scope,YourService){

    $scope.$on("showStudents", function (event, data) {                    
      YourService.showStudents().then(function(response){
           $scope.studentData = response.data;
       })      
    });
  })

saveIt方法,您也可以投入服务

答案 1 :(得分:1)

您无法在不同的scope

中直接调用本地controller方法

您可以通过以下方式访问控制器中的方法,

  1. 在同一个控制器中创建相同的方法
  2. 使用服务并注入控制器
  3. 使用$ rootScope(但不是好主意)
  4. 使用$broadcast$emit
  5. 您的示例代码,

     .controller("saveStudentController",function($scope,$http){
                              //here declare your method
                              $scope.showStudents = function(){
                                  $http.post(
                                      "selectStudent.php"
                                      ).then(function(response){
                                          $scope.studentData = response.data;
                                      })
                                 }
                                 $scope.saveIt = function(){
                                      $http.post("saveNewStudent.php",
                                      {"sName":$scope.sName,
                                      "gender" : $scope.gender,
                                      "salary" : $scope.salary,
                                      "dob" : $scope.dob
                                      }                                                                
                                  ).then(function(response){                            
                                      alert("Record Saved Successfully...");  
                                      $scope.showStudents();                            
                                  })                        
                              }                   
                          })
    

    请检查同一问题here

    希望这会对你有所帮助。