У меня есть службы, которые я использую в моем контроллере. проблема в том, что при запуске приложения по умолчанию вызывается $ http. Но мне нужно дать параметры на основе щелчка. поэтому я включил ajax-вызов на ng-click.
Но я получаю одни и те же данные по 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 с помощью выражения и felixge-node/mysql и момента.
сервер работает, но конец клина не работает на 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>
Проблема здесь - это объект Sentiment в сервисе sentiment = [];
его назначается при запуске, но не получает инициализацию, таким образом сохраняя предыдущее значение и отправляя одни и те же данные JSON для каждого вызова. так как JSON sotred здесь - это первый раз, когда вызов сделан. удаление, если затем с чувством разрешает эту проблему
sentiments.length !== 0
имеет значение true, и возвращается изначально присвоенное значениеsentiments