$scope.uiGrid 未定义

$scope.uiGrid is undefined

我正在尝试使用 angularjs ui-grid 创建一个 table 但我一直被告知 $scope.uiGrid 未定义,谁能告诉我是什么我做错了吗?

    requestYelp.success(
    function(obj) 
    {
        console.log(obj.businesses[0].name);

        $scope.gridOptions = {
            enableSorting: true,
            rowHeight:100,
            columnDefs: [
            { field: 'name' },
            { field: 'company'  },
            { field: 'image', cellTemplate:"<img width=\"50px\" ng-src=\"{{grid.getCellValue(row, col)}}\" lazy-src>"}
            ],

            data:[
            {name:obj.businesses[0].name,company: "Company1", image: obj.businesses[0].image_url},
            {name:obj.businesses[1].name,company:"Company2",image:obj.businesses[1].image_url},
            {name:obj.businesses[2].name,company:"Company3",image:obj.businesses[2].image_url}
            ]
        };
    }
);
}]);

console.log(obj.businesses[0].name) 会将正确的数据放到控制台,所以这不是 obj 变量的问题。代码仅在到达 gridOptions 时中断。

我不知道 ui-grid 工作原理的具体细节。但我猜测 ui-grid 指令立即期望 $scope.gridOptions$scope 上可用。但是,您仅在 异步 http 请求完成加载后才分配 $scope.gridOptions

您应该尝试在执行 http 请求之前立即提供一个空的(或充分准备好的)$scope.gridOptions

或者,有一个技巧可以通过在同一元素上添加额外的 ng-if 来延迟 any 指令的链接。像这样设置它:

ng-if='whenHttpRequestHasFinishedLoading'

并且在 success() 函数中设置 $scope.whenHttpRequestHasFinishedLoading = true

我知道这不能回答 OP 的问题,但这是 Google 的第一个匹配项,当您搜索 "ui-grid $scope.uiGrid undefined".

当我弄清楚我错过了什么时,我觉得自己像个彻头彻尾的白痴,但如果其他人遇到同样的问题,请确保您的 ui-grid 指令值...

    <div ui-grid="gridOptions"></div>

...匹配您的选项对象的名称:

    $scope.gridOptions = {};