Javascript 角度范围不打印变量

Javascript 角度范围不打印变量,javascript,angularjs,ajax,angularjs-service,angular-controller,Javascript,Angularjs,Ajax,Angularjs Service,Angular Controller,我有一个角度工厂和控制器: angular.module('myApp', ['ui.router', 'ngResource']) .factory('Widget', ['$http', function WidgetFactory($http) { return { all: function() { return $http({method: "GET", url: "/widgets"}); } }; }]) .c

我有一个角度工厂和控制器:

angular.module('myApp', ['ui.router', 'ngResource'])
.factory('Widget', ['$http', function WidgetFactory($http) {
    return {
        all: function() {
            return $http({method: "GET", url: "/widgets"});
        }
    };
}])
.controller('StoreCtrl', ['$scope', 'Widget', function($scope, Widget) {
    $scope.widgets = Widget.all();
}]);
在我的前端,我有

<div ng-controller="StoreCtrl">
    <li ng-repeat="widget in widgets">
        {{ widget.price }}
        {{ widget.name }}
    </li>
</div>

  • {{widget.price}} {{widget.name}
  • 但是在我的
    {{widget.price}}
    等中没有填充任何内容。

    我错过了什么?

    $http返回一个承诺。当承诺解析时,您需要将响应数据分配给$scope.widgets。在控制器中,尝试以下操作:

    Widget.all().then(function (data) {
        $scope.widgets = data;
    });
    

    $http返回一个承诺。当承诺解析时,您需要将响应数据分配给$scope.widgets。在控制器中,尝试以下操作:

    Widget.all().then(function (data) {
        $scope.widgets = data;
    });
    

    首先确保在

      $scope.widgets; 
    
    在控制器中。 您可以在控制器中打印此行

    console.log($scope.widgets);
    

    查看数据是否可用。

    首先确保在

      $scope.widgets; 
    
    在控制器中。 您可以在控制器中打印此行

    console.log($scope.widgets);
    

    查看数据是否可用。

    您没有完全按照框架的预期解决您的承诺。请查看有关承诺的一些解释。我们还需要将视图模型值(范围)设置为从中返回的正确值,包括以下内容

    Widget.all().then(function (response) {
        $scope.widgets = response.data;
    });
    
    • 数据{string | Object}–使用
    • 变换函数。状态–{number}–的HTTP状态代码
    • 答复。headers–{function([headerName])}–Header getter函数
    • config–{Object}–用于生成
    • 请求。statusText–{string}–响应的HTTP状态文本
    注意以下几点

    Widget.all().then(function (response) {
        $scope.widgets = response.data;
    });
    
    此外,根据一些观察,没有必要像对待
    WidgetFactory
    那样命名工厂函数,匿名函数就可以了。您还可以利用
    get

    .factory('Widget', ['$http', function($http) {
        return {
            all: function() {
                return $http.get('/widgets');
            }
        };
    }]);
    

    您没有像框架所期望的那样完全实现您的承诺。请查看有关承诺的一些解释。我们还需要将视图模型值(范围)设置为从中返回的正确值,包括以下内容

    Widget.all().then(function (response) {
        $scope.widgets = response.data;
    });
    
    • 数据{string | Object}–使用
    • 变换函数。状态–{number}–的HTTP状态代码
    • 答复。headers–{function([headerName])}–Header getter函数
    • config–{Object}–用于生成
    • 请求。statusText–{string}–响应的HTTP状态文本
    注意以下几点

    Widget.all().then(function (response) {
        $scope.widgets = response.data;
    });
    
    此外,根据一些观察,没有必要像对待
    WidgetFactory
    那样命名工厂函数,匿名函数就可以了。您还可以利用
    get

    .factory('Widget', ['$http', function($http) {
        return {
            all: function() {
                return $http.get('/widgets');
            }
        };
    }]);
    


    所以我得到了同样的结果。但是当我
    ng repeat=“widget in widgets”
    并执行
    {{widget.name}}
    时,我无法访问
    widgets
    内部的值。这似乎是最有帮助的答案,因为您需要解决一个获得结果的承诺。没有必要调用
    $apply
    ,因为我们完全处于讨论中的代码的上下文中@gh0st听起来您缺少了一些次要的东西,是否有一个css类影响了
  • 元素之一,或者有什么东西改变了它的可见性?同样,为了在上面的示例中更加详细,也许可以将您的var指定给
    data.data
    。对于回调来说,这通常是一个不好的参数名,您通常会看到
    response.data
    ,因为返回的函数上通常有
    data
    属性object@scniro
    $scope.widgets=data.data
    成功了。非常感谢。终于有人知道他们在说什么了。如果您将您的评论作为答案发布,我将对其进行标记。@gh0st为了完整性,我发布了我的答案以及一些小建议,因此我得到了相同的结果。但是当我
    ng repeat=“widget in widgets”
    并执行
    {{widget.name}}
    时,我无法访问
    widgets
    内部的值。这似乎是最有帮助的答案,因为您需要解决一个获得结果的承诺。没有必要调用
    $apply
    ,因为我们完全处于讨论中的代码的上下文中@gh0st听起来您缺少了一些次要的东西,是否有一个css类影响了
  • 元素之一,或者有什么东西改变了它的可见性?同样,为了在上面的示例中更加详细,也许可以将您的var指定给
    data.data
    。对于回调来说,这通常是一个不好的参数名,您通常会看到
    response.data
    ,因为返回的函数上通常有
    data
    属性object@scniro
    $scope.widgets=data.data
    成功了。非常感谢。终于有人知道他们在说什么了。如果您将评论作为答案发布,我将对其进行标记。@gh0st为了完整性,我发布了我的答案以及一些次要建议打印$scope.widgets在控制器中检查它是否包含数据。如果数据可用,您可以使用此行控制台.log($scope.widgets)查看您的数据;或者在浏览器中使用调试模式。有可用数据。这是一个对象数组。但是对象属性不会出现在它们的
    {{widget.name}中
    ng repeat
    中。这不是一个好的做法,但现在不要使用$scope,而是使用$rootScope,然后再试一次。@VishalSingh会完全破坏它。在控制器中打印$scope.widgets检查它是否包含数据。如果数据可用,您可以使用此行控制台.log($scope.widgets)查看数据;或者在浏览器中使用调试模式。有可用数据。这是一个对象数组。但是对象属性没有出现在
    ng repeat
    {{widget.name}}
    中。这不是一个好的做法