【问题标题】:Angularjs $http not returning Calls on ng-click after 1 st call第一次调用后,Angularjs $http 未返回 ng-click 调用
【发布时间】:2015-10-21 13:37:44
【问题描述】:

我有一个服务,我在我的着陆控制器中使用它。 问题是,当应用程序初始化时,默认情况下会调用 $http。 但我需要根据点击给出参数。所以我在 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 服务器是用 nodejs 编写的,带有 express 和 felixge-node/mysql 和 moment。

服务器正在工作,但 clint 端在 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>

【问题讨论】:

    标签: javascript angularjs node.js html express


    【解决方案1】:

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

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

    【讨论】:

    • 它与 Angular $http 服务无关。对 $http 服务的实际调用仅发生一次,因为从后续时间开始,条件 sentiments.length !== 0 为真,并返回初始分配的 sentiments
    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2020-03-28
    • 2015-05-31
    • 2020-04-13
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多