Javascript 无法从Angular JS中的控制器函数中访问$scope变量

Javascript 无法从Angular JS中的控制器函数中访问$scope变量,javascript,ruby-on-rails,ruby,scope,Javascript,Ruby On Rails,Ruby,Scope,我认为: <div ng-controller="formCtrl"> <div class="alert alert-success" ng-show={{alert}}>"hey"</div> </div> “嘿” 我的表格: <form name="myForm" ng-controller="formCtrl" ng-submit="submit()">... 。。。 在我的控制器formCtrl上,我有:

我认为:

<div ng-controller="formCtrl">
    <div class="alert alert-success" ng-show={{alert}}>"hey"</div>
</div>

“嘿”
我的表格:

  <form name="myForm" ng-controller="formCtrl" ng-submit="submit()">...
。。。
在我的控制器formCtrl上,我有:

    $scope.submit = function($scope) {

     $http.post('/add', {brand: this.brand} ).success(function(data){
         this.alert = true;
      });
     //this.alert(true); <-- also tried, did not work
  };
$scope.submit=函数($scope){
$http.post('/add',{brand:this.brand}).success(函数(数据){
this.alert=true;
});

//this.alert(true);无法查看您的所有代码,但我认为它存在多个问题,并且您对javascript中的作用域如何工作缺乏基本的了解。我将尝试在下面解释发生了什么,但您需要了解作用域才能完全理解……我建议您阅读以了解更多有关作用域的信息

首先,您不需要使用submit函数来接受变量。当您的submit调用甚至不接受变量时

$scope.submit = function($scope) {
可能是

$scope.submit = function() {
因为你像这样调用提交函数

...ng-submit="submit()">...
$scope.submit = function() {

     $http.post('/add', {brand: this.brand} ).success(function(data){
         $scope.alert = true;
      });
  };
此外,如果将该输入参数命名为“$scope”,它将覆盖原始$scope变量,从而使您无法在提交函数中访问它

相反,您可以实际访问$scope变量,而无需实际将其传递到submit函数,因为它在控制器的作用域内。基本上,控制器中的任何函数都可以访问$scope,而无需将其作为参数传递。因此简言之,您的代码应该如下所示

...ng-submit="submit()">...
$scope.submit = function() {

     $http.post('/add', {brand: this.brand} ).success(function(data){
         $scope.alert = true;
      });
  };