首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJs Grid -将代码放在事件下时不起作用

AngularJs Grid -将代码放在事件下时不起作用
EN

Stack Overflow用户
提问于 2013-06-28 03:36:35
回答 3查看 11.7K关注 0票数 0

下面是代码。

工作版本-网格显示和页面加载。

代码语言:javascript
复制
<html ng-app="myApp">
<head lang="en">
    <meta charset="utf-8">
    <title>Getting Started With ngGrid Example</title>
    <link href="http://localhost:4090/Content/ng-grid.min.css" rel="stylesheet" type="text/css" />
    <script src="http://localhost:4090/Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
    <script src="http://localhost:4090/Scripts/angular.js" type="text/javascript"></script>
    <script src="http://localhost:4090/Scripts/ng-grid-2.0.6.min.js" type="text/javascript"></script>
    <script>
        // main.js
        var app = angular.module('myApp', ['ngGrid']);
        app.controller('MyCtrl', function ($scope) {
            $scope.myData = [{ name: "Moroni", age: 50 },
                     { name: "Tiancum", age: 43 },
                     { name: "Jacob", age: 27 },
                     { name: "Nephi", age: 29 },
                     { name: "Enos", age: 34}];
            $scope.gridOptions = { data: 'myData' };
        });

    </script>
</head>
<body ng-controller="MyCtrl">
    <div class="gridStyle" ng-grid="gridOptions">
    </div>
</body>
</html>

非工作版本。移动了单击按钮下的网格代码。

代码语言:javascript
复制
<html ng-app="myApp">
<head lang="en">
    <meta charset="utf-8">
    <title>Getting Started With ngGrid Example</title>
    <link href="http://localhost:4090/Content/ng-grid.min.css" rel="stylesheet" type="text/css" />
    <script src="http://localhost:4090/Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
    <script src="http://localhost:4090/Scripts/angular.js" type="text/javascript"></script>
    <script src="http://localhost:4090/Scripts/ng-grid-2.0.6.min.js" type="text/javascript"></script>
    <script>
        // main.js
        var app = angular.module('myApp', ['ngGrid']);
        app.controller('MyCtrl', function ($scope) {
            $scope.LoadGrid = function () {
                alert('');
                $scope.myData = [{ name: "Moroni", age: 50 },
                     { name: "Tiancum", age: 43 },
                     { name: "Jacob", age: 27 },
                     { name: "Nephi", age: 29 },
                     { name: "Enos", age: 34}];
                $scope.gridOptions = { data: 'myData' };
            }
        });

    </script>
</head>
<body ng-controller="MyCtrl">
    <button id="click" ng-click="LoadGrid()">
        Load Grid</button>
    <div class="gridStyle" ng-grid="gridOptions">
    </div>
</body>
</html>

获取错误:- TypeError:无法设置未定义的属性'gridDim‘

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-28 07:45:25

您的ng网格在您实例化$scope.gridOptions之前进行初始化,因此它会抛出未定义的错误。此外,如果以编程方式更改$scope属性,则可能需要使用$apply将更改显示在模板上。

因此,您需要做的是确保数据结构存在(即使它们是空的),并在“启动”数据网格时调用$apply:

代码语言:javascript
复制
app.controller('MyCtrl', function ($scope) {
        $scope.myData = [];
        $scope.gridOptions = { data: 'myData' };
        $scope.LoadGrid = function () {
            alert('');
            $scope.myData = [{ name: "Moroni", age: 50 },
                 { name: "Tiancum", age: 43 },
                 { name: "Jacob", age: 27 },
                 { name: "Nephi", age: 29 },
                 { name: "Enos", age: 34}];
            $scope.$apply();
        }
    });

下面是一个来自ngGrid示例页面的编辑过的http://plnkr.co/edit/SnJ9J0?p=preview,用来展示它的工作原理:

票数 10
EN

Stack Overflow用户

发布于 2013-06-28 07:00:58

将标签移动到最后一个标签之前(加载速度也会更快)。

我推测这个错误是因为javascript在html准备好之前就加载了。

控制台错误日志还说明了什么吗?

票数 0
EN

Stack Overflow用户

发布于 2014-06-30 07:22:20

在数据实际到达之前定义gridOptions是可以的。这就是Angular绑定数据的方式的美妙之处-只需将数据设置为最终拥有数据的$scope对象-网格将足够智能,可以通过数据项上的内部$watch进行自我更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17351776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档