在$ http.get之后$ scope对象仍未定义

时间:2016-08-30 08:34:27

标签: javascript angularjs single-page-application

我有一个在$http.get之后返回的对象。我尝试使用此对象在clientdetails.html模板页面中显示。

var app = angular.module('openlegacy', ['ngRoute']);

app.config(function ($routeProvider) {
$routeProvider
    .when('/', {
        templateUrl : 'pages/main.html',
        controller  : 'clientCtrl'
    })

    .when('/new', {
        templateUrl : 'pages/clientform.html',
        controller  : 'postController'
    })

    .when('/client/:clientid',  {
        templateUrl : 'pages/clientdetails.html',
        controller  : 'clientCtrl'
    })
});

app.controller('clientCtrl', function($scope, $http, $location) {
$scope.oneclient = {};
$scope.getClient = function(clientid) {
    $http({
        method  :   'GET',
        url     :   '/openlegacy/web/client/' + clientid,
        headers :   {'Content-Type': 'application/json'}
    })
        .then(function(response) {
            $scope.oneclient = response.data;
            // console.log($scope.oneclient);
            $location.path('/client/' + clientid);
        });
};

这里console.log完全按照我想要的方式显示JSON响应对象。

clientdetails.html<div class="container" ng-controller="clientCtrl"> <h1>{{oneclient.name}}</h1> {。}}。

我总是收到oneclient未定义的错误。

为什么该对象未定义?

当我使用clientlist.html获取所有客户的列表时,同样的方法在$http.get中完美运行。

2 个答案:

答案 0 :(得分:0)

没有你习惯的路线很难分辨。但是,使用$ location.path()更改路径后,bass的范围可能会有所不同。

答案 1 :(得分:0)

您需要在实例化控制器时运行该方法。要运行控制器的方法onload,您可以使用NgInit
ng-init="yourfunction()"
(阅读主要问题的评论以获取更多信息)

请注意NgInit可以在范围中添加一些不必要的逻辑。 在实例化控制器时调用方法的更简洁方法是从控制器内部调用方法:

$scope.yourfunction();