Angularjs $ http在第一次通话后没有返回ng-click上的呼叫

时间:2015-07-30 09:12:11

标签: javascript angularjs node.js html5 express

我有一个服务,我在我的登陆控制器中使用它。 问题是当默认情况下调用$ init时会调用$ http。 但我需要根据点击给出params。所以我在ng-click上签了一个ajax调用。

但是我在ng-click上获得相同的数据

var sent = angular.module("sentAnalysis",["ngRoute"]);
var log = console.log.bind(console);





'use strict';
sent.service('Sentiments', function ($http) 
{
    var sentiments = [];
    return {
        getData: function(api,params,callback) {


            log(api);
            var cb = callback || angular.noop;
            if(sentiments.length !== 0) 
            {
                cb(sentiments);
            }else{
                $http.get(api,
                {
                    params : params

                })
                 .success(function(result) 
                    {

                    sentiments = result;
                    cb(result);
                    })
                    .error(function() {
                        cb();
                    })
            }
        }

    }
});

控制器是

app.controller('landingCtrl',  function ($scope,$http,Sentiments,$rootScope) 
{

 $scope.clickYesterday = function()
 {

    Sentiments.getData(api,params,function(res) 
    {

    }   

 }; 


 $scope.clickTomorrow = function()
 {

    Sentiments.getData(api,params,function(res) 
    {

    }   

 };



 /*Default Http Always Executes*/
 Sentiments.getData(api,params,function(res) 
    {

    }   


}]);

默认总是被执行但绑定到ng-click的函数没有被执行但是alwsys从服务器返回相同的JSON 服务器使用express和felixge-node / mysql和moment编写在nodejs中。

服务器正在运行但是clint end在ng-click

上不起作用

基本路线是

app.get('/api/sentiment',function(req,res)
{
  var sent ={};
  sent.status =false;
  if(user.isDB)
  {  

  var startDate = req.param('startDate');
  var endDate = req.param('endDate');

  var startValid  = moment(startDate).isValid();
  var endValid  = moment(endDate).isValid();
  log(startValid + " "+endValid);

  if(startValid && endValid)
  {

      var options ={};
      options.values = [];
      options.values.push(startDate);
      options.values.push(endDate);
      options.sql = 'Some Query ';
      options.timeout = 4000;



      connection.query(options,function(err, rows, fields)
      {
        if (!err)
        {
          log("Data row received For Query");
          log("Data row Length : "+rows.length);
          log("Executing Query :");
          log("StartDate : "+startDate);
          log("EndDate : "+endDate);
          log(options.sql);


            if(rows.length!=0)
            { 
            sent.status =true;
            sent.data = rows;
            }
            res.send(sent);
        }
      });

  }
  else
  {
    log("Invalid Date Format/Or Data Error");
  }

}
else
{
  log("DataBase Connection Issue");
   res.send(sent);
}



});

html就像这样

 <div ng-click="clickYesterday()" class="btn btn-primary"><b>Yesterday</b></div>

1 个答案:

答案 0 :(得分:1)

这里的问题是服务中的情感对象 情绪= [];

它在启动时分配,但它没有重新初始化,因此保持前一个值并在每次调用时发送相同的JSON数据。 因为这里的JSON是第一次打电话。去除 若情绪能够解决这个问题