We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. Image for the cookie policy date

Initializing the grid within an OnClickListener won't work

Hello community,

I am developing a small SPA Test application, the corresponding code is provided below:

Index.html:

<!DOCTYPE html>

<html ng-app="app">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>SyncFusion</title>

    <!-- Style -->
    <link rel='nofollow' href="~/Content/themes/bootstrap.min.css" rel="stylesheet" />
    <link rel='nofollow' href="~/Content/themes/default-theme/ej.widgets.all.min.css" rel="stylesheet" />
    <link rel='nofollow' href="~/Content/themes/default.css" rel="stylesheet" />
    <link rel='nofollow' href="~/Content/themes/default-responsive.css" rel="stylesheet" />
    <link rel='nofollow' href="~/Content/themes/responsive-css/ej.responsive.css" rel="stylesheet" />

    <!-- Scripts -->
    <script src="~/Scripts/angular.min.js"></script>
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jsrender.min.js"></script>
    <script src="~/Scripts/jquery.globalize.min.js"></script>
    <script src="~/Scripts/ej.web.all.min.js"></script>
    <script src="~/Scripts/jsondata.min.js"></script>
    <script src="~/Scripts/ej.widget.angular.min.js"></script>
    <script src="~/Scripts/properties.js"></script>
    <script src="~/App/app.js"></script>
</head>

<body ng-controller="syncFusionGridController">
    <div class="content-container-fluid">
        <div class="row">
            <div id="search">
                <label>Customername: </label><input type="text" />
                <input type="button" ng-click="OnClickSetEmployeeData()" value="Get Data" />
            </div>
            <div class="cols-sample-area">
                <div id="Grid" ej-grid e-datasource="data2" e-columns="col" e-allowgrouping="true" e-allowsorting="true">
                </div>
            </div>
            <div>
                <input type="button" ng-click="OnClickSetEmployeeData()" value="Set employee data long" />
            </div>
        </div>
    </div>

    <!-- Custom Scripts -->
    <script src="~/App/Controllers/syncFusionGridController.js"></script>
</body>
</html>

app.js:

(function () {

    // initialize app
    var app = angular.module('app', ['ejangular']);

}());

syncFusionGridController.js:

(function () {

    // Sample data
    var employeeList = [
         { "EmployeeID": 1, "LastName": "Davolio", "FirstName": "Nancy", "Title": "Sales Representative", "City": "Seattle", "Country": "USA" },
         { "EmployeeID": 2, "LastName": "Fuller", "FirstName": "Andrew", "Title": "Vice President, Sales", "City": "Tacoma", "Country": "USA" },
         { "EmployeeID": 3, "LastName": "Leverling", "FirstName": "Janet", "Title": "Sales Representative", "City": "Kirkland", "Country": "USA" },
         { "EmployeeID": 4, "LastName": "Peacock", "FirstName": "Margaret", "Title": "Sales Representative", "City": "Redmond", "Country": "USA" },
         { "EmployeeID": 5, "LastName": "Buchanan", "FirstName": "Steven", "Title": "Sales Manager", "City": "London", "Country": "UK" },
         { "EmployeeID": 6, "LastName": "Suyama", "FirstName": "Michael", "Title": "Sales Representative", "City": "London", "Country": "UK" },
         { "EmployeeID": 7, "LastName": "King", "FirstName": "Robert", "Title": "Sales Representative", "City": "London", "Country": "UK" },
         { "EmployeeID": 8, "LastName": "Callahan", "FirstName": "Laura", "Title": "Inside Sales Coordinator", "City": "Seattle", "Country": "USA" },
         { "EmployeeID": 9, "LastName": "Dodsworth", "FirstName": "Anne", "Title": "Sales Representative", "City": "London", "Country": "UK" },
         { "EmployeeID": 4, "LastName": "Peacock", "FirstName": "Margaret", "Title": "Sales Representative", "City": "Redmond", "Country": "USA" },
         { "EmployeeID": 5, "LastName": "Buchanan", "FirstName": "Steven", "Title": "Sales Manager", "City": "London", "Country": "UK" },
         { "EmployeeID": 6, "LastName": "Suyama", "FirstName": "Michael", "Title": "Sales Representative", "City": "London", "Country": "UK" },
         { "EmployeeID": 7, "LastName": "King", "FirstName": "Robert", "Title": "Sales Representative", "City": "London", "Country": "UK" },
         { "EmployeeID": 8, "LastName": "Callahan", "FirstName": "Laura", "Title": "Inside Sales Coordinator", "City": "Seattle", "Country": "USA" },
         { "EmployeeID": 9, "LastName": "Dodsworth", "FirstName": "Anne", "Title": "Sales Representative", "City": "London", "Country": "UK" },
         { "EmployeeID": 10, "LastName": "Suyama", "FirstName": "Margaret", "Title": "Sales Representative", "City": "London", "Country": "UK" }
    ];

    // Sample data
    var employeeList2 = [
         { "EmployeeID": 999, "LastName": "1233_Davolio", "FirstName": "Nancy", "Title": "Sales Representative", "City": "Seattle", "Country": "USA" },
         { "EmployeeID": 999, "LastName": "1233_Fuller", "FirstName": "Andrew", "Title": "Vice President, Sales", "City": "Tacoma", "Country": "USA" },
         { "EmployeeID": 999, "LastName": "1233_Leverling", "FirstName": "Janet", "Title": "Sales Representative", "City": "Kirkland", "Country": "USA" },
         { "EmployeeID": 999, "LastName": "1233_Peacock", "FirstName": "Margaret", "Title": "Sales Representative", "City": "Redmond", "Country": "USA" },        
    ];
   
    // Sample data
    var customerList = [
         { "CustomerID": 999, "LastName": "1233_Davolio", "FirstName": "Nancy", "Age" : 34 },
         { "CustomerID": 999, "LastName": "1233_Fuller", "FirstName": "Andrew", "Age": 35 },
         { "CustomerID": 999, "LastName": "1233_Leverling", "FirstName": "Janet", "Age": 44 },
         { "CustomerID": 999, "LastName": "1233_Peacock", "FirstName": "Margaret", "Age": 54 },
    ];

    // get reference to app
    var app = angular.module('app');

        // create new controller
    app.controller('syncFusionGridController', ['$scope', function ($scope) {

        // $scope.data2 = [];
        $scope.col = [
                { field: "EmployeeID", headerText: "EmployeeID", width: 150 },
                { field: "LastName", headerText: "LastName", width: 180 },
                { field: "FirstName", headerText: "FirstName", width: 175 },
                { field: "Title", headerText: "Title", width: 175},
                { field: "City", headerText: "City", width: 180},
                { field: "Country", headerText: "Country", width: 110 },
        ];

        $scope.OnClickSetEmployeeData = function () {
           
            // initializing the grid here won't work, it has to be initialized always outside any function within the controller
            // as shown a few lines above with the bold code wich is commented out for now.
            $scope.data2 = [];
            $scope.data2 = employeeList;
        }
    }]);

}())

The initialization of the grid is only working if it is placed in the top
level of the angular controller function. It means that the initialization won't
work if it is for instance placed inside a callback function or promise
function (See the callback "$scope.OnClickSetEmployeeData" and
corresponding comments). Is it intended to behave like this?


3 Replies

AS Alan Sangeeth S Syncfusion Team February 9, 2015 12:36 PM UTC

Hi Gokhan,

Thanks for using Syncfusion Products.

For your kind information, we used to set scope to control properties during the control initialization and so it is mandatory to initialize the scope variable at initial time itself.

Please refer the online documentation link that explains that the scope must be set up to initial state inside controller.

https://docs.angularjs.org/guide/controller

Please let us know if you have any queries.

Regards,
Alan Sangeeth S




GC Gökhan Cimsir February 11, 2015 10:25 AM UTC

Hey Ala,

Thank you very much for your fast response.

I will consider your recommendations regarding the initialization.

Best regards,
Gökhan


AS Alan Sangeeth S Syncfusion Team February 12, 2015 11:33 AM UTC

Hi Gokhan,

Thanks for the update.

We are happy to hear that your issue has been resolved.

Please let us know if you need any further assistance.

Regards,
Alan Sangeeth S



Loader.
Live Chat Icon For mobile
Up arrow icon