Используя угловой, у меня есть функция, которая при подключении к кнопке (ng-click) в представлении работает, как ожидалось. Например, это выполняется и выполняет мою функцию при нажатии:
<button ng-click="foo()">add Foo!</button>
Тем не менее, я хотел бы обойти это, чтобы нажать эту кнопку, чтобы запустить функцию. Поэтому в моем контроллере я добавил:
foo();
Это не выполняло мою функцию и не использовало ng-init в представлении, как таковое:
<div ng-init="foo()"></div>
Я уверен, что мой код не выполняется, потому что он предназначен для записи в базу данных. При щелчке я вижу ожидаемые результаты в моем журнале консоли сервера, и данные записываются в базу данных. Используя вышеуказанные функции, журнал консоли сервера не получает ответа, и новые данные не записываются в базу данных.
Edit: Здесь моя функция, которая отправляет сообщение на мой сервер:
$scope.foo = function() {
var SOName = $scope.bar.SO;
var len = $scope.bar.FP.length;
for(x=0;x<len;x++){
$http.post('/track', {"track":$scope.bar.FP[x].name, "project":$scope.bar.SO}).success(function(response) {
console.log(response);
});
};};
где
$scope.bar =
{"SO":"Do xx","QT":0,"RG":[{"name":"yy","LOE":0,"QT":0}],"FP":[{"name":"zz","LOE":3,"QT":0},{"name":"bb","LOE":1,"QT":0},{"name":"ff","LOE":1,"QT":0}],"VP":[],"QC":[{"name":"ww","LOE":15,"QT":0}],"ED":[{"name":"ee","LOE":0,"QT":0}]}
При попытке вручную запустить эту функцию я изменил $scope.foo
на var foo
и добавил foo();
для запуска функции.
Edit: Пробовал просто называть {{foo()}}
в представлении - это было довольно сложно. Страница будет либо зависать при загрузке, либо повторно отправлять пост после сообщения того же самого.
Чтобы обойти это, я просто добавил setTimeout:
setTimeout(function() { $scope.foo() },4000);
Четыре секунды дают зависимой функции достаточно времени для загрузки.
Попробуйте перезаписать функцию foo()
чтобы иметь следующий пост http в цикле for:
var postdata = {"track":$scope.bar.FP[x].name, "project":$scope.bar.SO},
req = {
method: 'POST',
url: '/track',
headers: {
'Content-Type': "application/x-www-form-urlencoded; charset=utf-8"
},
data: $.param(postdata)
};
$http(req).success(function(data, status, headers, config){
console.log(data);
}).error(function(data, status, headers, config){
alert("error"+res);
});
Я просто убедился, что у вас есть правильный заголовок Content-Type
и используется $.param()
для подготовки данных. Кроме того, я добавил обработчик ошибок для HTTP-запроса, который позволяет вам понять, почему сообщение не работает.
Вот рабочий Plunk о том, как сделать функцию foo()
выполняемой на странице/загрузке контроллера:
На plunk просмотрите IndexCtrl.js
, он содержит примеры при вызове foo()
как часть $scope
, как локальную function()
контроллера function()
, а также с помощью встроенного тега ng-init
.
Надеюсь, это поможет!
Вот некоторый код, который запускает функцию из контроллера
angular
.module('myApp', [])
.controller('ctrl', function() {
var vm = this;
vm.check = false;
vm.f = function() {
vm.check = true;
}
vm.f();
});
<div ng-app="myApp">
<div ng-controller="ctrl as c">
{{c.check}}
</div>
</div>
for
, но это может быть связано с тем, как мой сервер node.js обрабатывает записи. Он используетrequestify
для запуска сообщений. Я мог бы интегрировать код, но кажется, что то, что я пытаюсь сделать, должно быть возможно довольно просто через угловую.