Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自http json的angularjs更新模型视图_Javascript_Angularjs_Json_Http - Fatal编程技术网

Javascript 来自http json的angularjs更新模型视图

Javascript 来自http json的angularjs更新模型视图,javascript,angularjs,json,http,Javascript,Angularjs,Json,Http,大家好,我正在学习angular,我写了一个简单的应用程序,但我不知道如何更新模型或视图,稍后再获取http json angular.module("dataApp",[]) .controller("ctrlData",function($scope,$http){ $http.get('consulta.php') .success(function(data){ //console.log(data); $scope.personas =

大家好,我正在学习angular,我写了一个简单的应用程序,但我不知道如何更新模型或视图,稍后再获取http json

angular.module("dataApp",[])

.controller("ctrlData",function($scope,$http){
    $http.get('consulta.php')
    .success(function(data){
        //console.log(data);
        $scope.personas = data;
    }).error(function(error){
        console.log(error);
    }); });//end ctrl
consulta.php的输出

[
    {
        "id_persona":"1",
        "nombre":"sebastian",
        "apellido":"rincon ",
        "telefono":"4422404",
        "direccion":"calle 93 # 23 2132"
    },
    {
        "id_persona":"2",
        "nombre":"leiton",
        "apellido":"aricapa",
        "telefono":"4421112313",
        "direccion":"calle 634 supia avenia 93"
    },
    {
        "id_persona":"3",
        "nombre":"daniel",
        "apellido":"desconocido",
        "telefono":"645452423",
        "direccion":"urbanizacion los vientos 123"
    },
    {
        "id_persona":"4",
        "nombre":"angularjs",
        "apellido":"javascript",
        "telefono":"0231391",
        "direccion":"module controller 321"
    },
    {
        "id_persona":"5",
        "nombre":"mark",
        "apellido":"zuckerberg",
        "telefono":"423423423",
        "direccion":"palo alto california"
    }
]
index.html

<tr ng-repeat="persona in personas">

            <td>{{persona.id_persona}}</td>
            <td>{{persona.nombre}}</td>
            <td>{{persona.apellido}}</td>
            <td>{{persona.telefono}}</td>
            <td>{{persona.direccion}}</td>
</tr>

但我认为这是不对的!。请帮助,谢谢。

您需要再次致电服务,以便更新视图

在控制器中编写
$http.get()
调用时,在加载视图时只调用一次。之后就不叫了

您可以使用类似的工具定期调用您的服务

angular.module("dataApp",[])
.controller("ctrlData",function($scope,$http){
    setInterval(function(){
        $http.get(...)
    }, 60000);
});
这将每分钟呼叫您的服务以更新您的视图


但是请注意,您不应该在控制器中直接使用$http;而是使用服务。

您需要再次调用该服务才能更新视图

在控制器中编写
$http.get()
调用时,在加载视图时只调用一次。之后就不叫了

您可以使用类似的工具定期调用您的服务

angular.module("dataApp",[])
.controller("ctrlData",function($scope,$http){
    setInterval(function(){
        $http.get(...)
    }, 60000);
});
这将每分钟呼叫您的服务以更新您的视图


但是请注意,您不应该在控制器中直接使用$http;而是使用服务。

如果您希望您的web应用程序对服务器端更改做出反应,您需要web套接字或类似的东西,或者定期轮询API。我认为第一种(最好的)选择在这一点上对你来说可能有点太复杂了,所以剩下第二种

在您开始实现类似的东西之前,您必须确定您实际上需要您的视图在没有用户交互的情况下对更改做出反应。为什么仅仅等待用户刷新(或更改路由)还不够呢

无论如何,这里有一种方法可以创建服务来轮询API中的数据:

angular.module('dataApp').service('personaService', PersonaService);

function PersonaService($http, $q, $interval){  
    var pollingInterval;

    this.getConsulta = getConsulta;
    this.startGetConsulta = startGetConsulta;
    this.stopGetConsulta = stopGetConsulta;

    function startGetConsulta(interval){
        if(pollingInterval){
            return $q.resolve();
        }
        var deferred = $q.defer();

        // Get first time
        getConsulta().then(function(data){
            deferred.notify(data);
        }, function(response){
            deferred.reject(response);
        });
        // Start polling
        pollingInterval = $interval(function(){
            getConsulta().then(function(data){
                deferred.notify(data);
            }, function(response){
                deferred.reject(response);
            });
        }, interval);

        return deferred.promise;
    }

    function stopGetConsulta(){
        if(angular.isDefined(pollingInterval)) {
            $interval.cancel(pollingInterval);
        }
        pollingInterval = null;
    }

    function getConsulta(){
        return $http.get('consulta.php')
            .then(function(response){ return response.data; } );
    }
}
要使用它,您将向控制器中注入并开始如下轮询:

angular.module("dataApp",[])
.controller("ctrlData",function($scope, personaService){

    personaService.startGetConsulta(60000).then(null, null, function(data){
        $scope.personas = data;
    });

});
请注意,由于我们使用的是
notify
而不是
resolve
,因此对于服务返回的承诺,我们在使用
函数中的承诺时使用了第三个notify回调

应该这样做。但只是为了巩固东西——不要盲目地使用它。首先,确保您确实需要您的视图具有这种反应性。然后确保您真正理解上述示例中发生的事情


如果您想让web应用程序对服务器端的更改做出反应,您需要web套接字或类似的东西,或者定期轮询API。我认为第一种(最好的)选择在这一点上对你来说可能有点太复杂了,所以剩下第二种

在您开始实现类似的东西之前,您必须确定您实际上需要您的视图在没有用户交互的情况下对更改做出反应。为什么仅仅等待用户刷新(或更改路由)还不够呢

无论如何,这里有一种方法可以创建服务来轮询API中的数据:

angular.module('dataApp').service('personaService', PersonaService);

function PersonaService($http, $q, $interval){  
    var pollingInterval;

    this.getConsulta = getConsulta;
    this.startGetConsulta = startGetConsulta;
    this.stopGetConsulta = stopGetConsulta;

    function startGetConsulta(interval){
        if(pollingInterval){
            return $q.resolve();
        }
        var deferred = $q.defer();

        // Get first time
        getConsulta().then(function(data){
            deferred.notify(data);
        }, function(response){
            deferred.reject(response);
        });
        // Start polling
        pollingInterval = $interval(function(){
            getConsulta().then(function(data){
                deferred.notify(data);
            }, function(response){
                deferred.reject(response);
            });
        }, interval);

        return deferred.promise;
    }

    function stopGetConsulta(){
        if(angular.isDefined(pollingInterval)) {
            $interval.cancel(pollingInterval);
        }
        pollingInterval = null;
    }

    function getConsulta(){
        return $http.get('consulta.php')
            .then(function(response){ return response.data; } );
    }
}
要使用它,您将向控制器中注入并开始如下轮询:

angular.module("dataApp",[])
.controller("ctrlData",function($scope, personaService){

    personaService.startGetConsulta(60000).then(null, null, function(data){
        $scope.personas = data;
    });

});
请注意,由于我们使用的是
notify
而不是
resolve
,因此对于服务返回的承诺,我们在使用
函数中的承诺时使用了第三个notify回调

应该这样做。但只是为了巩固东西——不要盲目地使用它。首先,确保您确实需要您的视图具有这种反应性。然后确保您真正理解上述示例中发生的事情


不要使用
.success()
.error()
。这些都是旧的,取决于你的AngularJS版本,甚至可能不起作用。而是使用
.then()
。如何在数据库中插入行?给我们看看代码。或者您是想在应用程序外部使用sql插入行吗?不要使用
.success()
.error()
。这些都是旧的,取决于你的AngularJS版本,甚至可能不起作用。而是使用
.then()
。如何在数据库中插入行?给我们看看代码。或者你是想在你的应用程序之外插入一行sql吗?如果你有一个像Jenkins这样的应用程序,那么轮询API是很有用的。我不是在争论它是否有用,只是@zebaz应该确定这才是他真正需要的。:-)如果你有像Jenkins这样的应用程序,轮询API是有用的。我不是在争论它是否有用,只是@zebaz应该确定这才是他真正需要的。:-)