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

时间:2014-01-29 01:13:39

标签: 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,我有:

    $scope.submit = function($scope) {

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

我希望能够在提交表单时更新警告框。

所以:点击表单上的提醒按钮 然后:提交表格 然后:使用成功或失败消息更新“警报”

我认为我的范围都混淆了。不确定。

1 个答案:

答案 0 :(得分:2)

无法看到您的所有代码,但我认为它存在多个问题,而且您对javascript中的范围界定方式缺乏基本的了解。我将尝试解释下面发生了什么,但您需要了解范围界定才能完全理解......我建议您阅读http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/以了解有关范围界定的更多信息。

首先你不需要提交函数来接受变量。当您的提交电话甚至不接受时。

$scope.submit = function($scope) {

可以......

$scope.submit = function() {

因为你像这样调用提交函数......

...ng-submit="submit()">...

此外,如果您将该输入参数命名为“$ scope”,它将覆盖原始的$ scope变量,使您无法在提交函数中访问它。

相反,您实际上可以访问$ scope变量而不实际将其传递给submit函数,因为它在控制器的范围内。基本上,控制器中的任何函数都可以访问$ scope,而无需将其作为参数传递。所以简而言之,你的代码应该是这样的......

$scope.submit = function() {

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