Angular var在函数之外使用

时间:2017-02-07 11:42:21

标签: javascript angularjs parsing

一个简单的Angular / javascript问题:

我有一个使用两个函数的表单,一个是“点击”执行,另一个是“提交时”:

$scope.onclickevent = function(files) {
          $scope.imageFile = files[0];
          console.log($scope.imageFile);
      }

$scope.onsubmitevent = function(){
          console.log($scope.imageFile); // herein lies the problem
      }

HTML是这样的:

    <div class="file-field input-field ">
         <input type="file" name="file" onchange="angular.element(this).scope().onclickevent(this.files)"/>
    </div>

    <a href="" class="btn" ng-click="onsubmitevent()">Create</a>

如何从其他函数访问$ scope.imageFile?在调用onsubmitevent时,$ scope.imageFile是“未定义的”。然而,第一个函数中的console.log将其显示为set。

$ rootscope是一个选项,但全局设置似乎是错误的。 将变量解析回html然后再回到第二个函数也似乎啰嗦和繁琐。

5 个答案:

答案 0 :(得分:2)

如果您先拨打onclickevent,则会将$scope.imageFile设置为files[0],然后您可以onsubmitevent通过$scope.imageFile

答案 1 :(得分:1)

调用onclickevent后它应该可以工作。

否则,你可以试试这个:

$scope.onclickevent = function(files) {
      var imageFile = files[0];
      $scope.imageFile = files[0];
      console.log($scope.imageFile);
  }

$scope.onsubmitevent = function(){
      console.log(imageFile); // herein lies the problem
  }

答案 2 :(得分:1)

您可以使用该服务

Angular Service To Set And Retrieve Object Between Controllers

像这样

app.service('StoreService',function(){

  var data1={};
  var data2={};
  this.save=function(data1,data2){        
       this.data1=data1;
       this.data2=data2;

  };

  this.getData1=function(){

    return data1;

  };

  this.getData2=function(){

    return data2;

  };
});

答案 3 :(得分:1)

尝试在两个函数之外初始化$ scope.imageFile,例如:

$scope.imageFile = [];

$scope.onclickevent = function(files) {
      $scope.imageFile = files[0];
      console.log($scope.imageFile);
  }

$scope.onsubmitevent = function(){
      console.log($scope.imageFile);
  }

如果这不起作用,并且我不建议将其作为常规做法,请使用根范围变量,例如:

$rootScope.imageFile = [];

$scope.onclickevent = function(files) {
      $rootScope.imageFile = files[0];
      console.log($rootScope.imageFile);
  }

$scope.onsubmitevent = function(){
      console.log($rootScope.imageFile);
  }

我想强调的是,使用rootcope变量并不是必需的;我只是在这里添加它来帮助您测试解决方案。

答案 4 :(得分:1)

你可以在你的函数之外定义$ scope.ImageFile

 $scope.imageFile = [];

 $scope.onclickevent = function(files) {
     $scope.imageFile = files[0];
     console.log($scope.imageFile);
  }

 $scope.onsubmitevent = function(){
    console.log($scope.imageFile);
 }