使用angular,我有一个功能,当连接到视图中的按钮(ng-click)时,按预期运行。例如,这会在点击时运行并执行我的功能:
<button ng-click="foo()">add Foo!</button>
但是,我想绕过必须单击此按钮才能运行该功能。所以在我的控制器中我添加了:
foo();
这没有运行我的功能,也没有在视图中使用ng-init,因此:
<div ng-init="foo()"></div>
我确定我的代码没有被执行,因为它的目的是写入数据库。点击后,我在服务器的控制台日志中看到了预期的结果,并将数据写入数据库。使用上述功能,服务器的控制台日志不会收到响应,也不会将新数据写入数据库。
编辑: 这是我的函数,它将一个帖子发送到我的服务器:
$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();
以尝试运行该功能。
编辑:
试图在视图中简单地调用{{foo()}}
- 但这非常挑剔。该页面会挂起,或者在发布相同内容后重复发送帖子。
答案 0 :(得分:0)
这是一个关于如何在页面/控制器加载上执行函数foo()
的工作Plunk:
在插件IndexCtrl.js
中,它包含将foo()
作为$scope
的一部分调用,作为控制器本地function()
并使用ng-init
的示例}内联标记。
希望有所帮助!
答案 1 :(得分:0)
以下是一些在控制器中运行函数的代码
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>
答案 2 :(得分:0)
尝试重新编写foo()
函数,在for循环中包含以下http帖子:
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请求添加了一个on错误处理程序,它允许您查看帖子失败的原因。
答案 3 :(得分:0)
为了解决这个问题,我只需添加一个setTimeout:
setTimeout(function() { $scope.foo() },4000);
四秒钟为相关功能提供足够的时间来加载。