Angularjs存储$ scope变量

时间:2015-05-11 23:53:12

标签: angularjs node.js angularjs-directive angularjs-scope mean-stack

我正在使用Yeoman Angular-fullstack构建一个Web应用程序。我对如何更新我的$ scope变量感到困惑,这样一旦做出更改,结果就会自动显示在html页面上,而不会刷新。

HTML

<h1 class="page-header">Drugs:</h1>
<div class="row">
    <div class="col-sm-4 col-sm-offset-4">
        <div ng-repeat="current in alldrugs">
                <p>
                <a href="/edit={{current._id}}"> <button class="btn btn-default" type="button">{{current.name}}</button></a>
                <a ng-click="delete(current)"><button class="btn btn-default" type="button">delete</button></a>
              </p>   
        </div>
    </div>
  </div> 

Controller.js

'use strict';

angular.module('firstApp')
  .controller('MainCtrl', function ($scope, $http) {
    $scope.alldrugs = [];

    $http.get('/api/drugs').success(function(alldrugs) {
      $scope.alldrugs = alldrugs;
    });

    $scope.delete = function(thing) {
      $http.delete('/api/drugs/' + thing._id);
      $http.get('/api/drugs').success(function(alldrugs) {
        $scope.alldrugs = alldrugs;
      });
    };
  });

当调用$ scope.delete时,该项目将被删除,但在刷新页面之前,页面不会反映更改。我认为它与http回调函数的范围有关。任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:1)

问题是$ http.delete和$ http.get是异步调用的。

当调用$ http.get时,$ http.delete还没有完成。您必须确保在删除后调用get。

此代码可以使用,但它不是一个优雅的解决方案:

$scope.delete = function(thing) {
  $http.delete('/api/drugs/' + thing._id).success(function(){
        //The get will be called AFTER the delete
        $http.get('/api/drugs').success(function(alldrugs) {
           $scope.alldrugs = alldrugs;
        });
  });
};

答案 1 :(得分:0)

您只需使用一个请求即可解决问题:

function myFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var s=ss.getSheetByName('odpovědi')
  var lr=s.getLastRow()  
  var ax=s.getRange(lr, 10).getValue();
     if(ax == ""){
        ax = "foo";
        s.getRange(lr, 10).setValue(ax);
  }
  }