如何在成功后执行动作 - angularjs

时间:2015-01-29 05:59:38

标签: angularjs

角色新手,很难理解这个功能。 这是一个聊天模拟器,其中有一个文本框,一个按钮和一个显示框。 用户在文本框中输入一个值,按下按钮,然后在显示框中反映出来。

除了显示用户输入的文本外,还有一个使用用户输入值的数据检索过程。

用户输入值后,我想禁用文本框,直到检索到数据然后再次启用它。

但是使用此代码,用户输入的文本仍显示在显示中,同时正在检索数据。

首先应如何设计此代码。 的 HTML:

<textarea ng-model="userInput"></textarea>
<a href="javascript:;" ng-click="GetNextItem()">Send</a>

JS:

$scope.EnableUserInput = true;
$scope.GetNextItem = function (){ 
   if($scope.EnableUserInput){
      //show user entered in display box 
      $scope.ChatHistory.push({            
        UserText: $scope.userInput,            
    }); 
    $scope.userInput = ""; 
  }
}
$scope.GetData()=function(id){
 DataFactory.GetData(id)
 .success(function (data, status) {
   $scope.EnableUserInput = false;
   $timeout(function () {
   $scope.ChatHistory.push((JSON.parse(data)));
   }, 2000);
   $scope.EnableUserInput = true;
 })
}

修改 如果上面的例子令人困惑,这里更简单。

$scope.MainFunction = function(){

   $scope.GetDataUsingFactory(){
     var promise = DataFactory.GetData();
     promise.then(){
       alert(2);
       $scope.common();
     })
   }
   //some more factory functions
   alert(1);
   $scope.common = function(){
   //common code to execute after all the FactoryFunctions are done getting data 
   }
}

我想要发生的是先提醒警报(2)然后警告(1)&amp; $ scope.common()。但这完全是另一种方式。

使用角度1.2.28

1 个答案:

答案 0 :(得分:1)

如果要禁用textarea,可以添加ng-disabled指令,如

<textarea ng-model="userInput" ng-disabled="!EnableUserInput"></textarea>

由于您将userInput绑定到textarea,因此在模型更改之前,textarea不会刷新。

样品

$scope.common = function(){
   //some more factory functions
   alert(1);
   //common code to execute after all the FactoryFunctions are done getting data 
}
$scope.MainFunction = function(){
   $scope.GetDataUsingFactory(){
     var promise = DataFactory.GetData();
     promise.then(){
       alert(2);
       $scope.common();
     })
   }
   alert(3);

}

然后序列为alert(3), alert(2), alert(1), common code