update: when i just put dummy json data in my grid controller then
everything is showing correctly.
function _getAllItems(node,assessed) {
vm.allItems = 'json dummydata';
};
So it should have something to do with timing...
Op maandag 27 april 2015 12:32:12 UTC+2 schreef Gerry Veltjen:
>
> Hello all,
>
> I am seriously banging my head for several days now with the following
> problem:
>
> I have created a directive that actually is just a crud table(Used
> ng-table) having isolated scope and using its own controller. On my page i
> have some tabs where on each tab i can have several crud table directives.
> The problem i am having is that the table is not showing any result most
> of the time. I have had some tests when the table was showing the data but
> these tests are very rare(strange i know :-) ). I installed a firefox
> extension to inspect my scope values and when i
> look at my scope object that should bind to my table the data is actually
> always in my scope object. I really hope someone can help me out or put me
> in the right direction. Thanx in advance. I will post some code example
> here :
>
> *<!--using of the Directive Grid(childnode and selectedAssessed are
> correctly filled) -->*
> <div crud-grid id="grid_{{childnode.treeObjectId}}"
> column-button-click='itemsCtrl.gridOnButtonClick'
> ng-node="childnode"
> ng-selected-assessed="vm.selectedAssessed">
> </div>
>
> *<!--Directive Grid -->*
> (function () {
> 'use strict';
>
> var app = angular.module('app');
>
> app.directive('crudGrid', function () {
> return {
> // 'A' - only matches attribute name
> // 'E' - only matches element name
> // 'C' - only matches class name
> restrict: 'A',
> // scope = false, parent scope
> // scope = true, get new scope
> // scope = {..}, isolated scope
> scope: {
> columnButtonClick: "&", // method binding
> ngNode: '=',
> ngSelectedAssessed: '='
> },
> // view
> templateUrl: '/app/directives/crud.grid/crud.grid.view.html',
>
> // controller
> controller: "crudgridController as vm",
> link: function (scope, iElement, iAttrs, ctrl) {
> scope.selectedNode = iAttrs.ngNode;
> scope.selectedAssessed = iAttrs.ngSelectedAssessed;
> }
> };
> });
>
> })();
>
> *<!--Directive Grid template-->*
> <div class="table-responsive">
> <table ng-table='vm.tableParamsMark' class="table table-striped
> table-bordered table-condensed ng-table-rowselected table-hover crud-grid">
> <tr ng-repeat='mark in vm.allItems'>
>
> <td data-title="'MarkId'" data-ng-show="false"
> sortable="'userName'">
> {{mark.markId}}
> </td>
> <td data-title="'Score'" sortable="'score'">
> {{mark.scoreId}}
> </td>
> <td data-title="'Omschrijving'" sortable="'description'">
> {{mark.description}}
> </td>
> <td data-title="'Datum'" sortable="'date'">
> {{mark.date}}
> </td>
> <td data-title="'Door'" sortable="'markingUserId'">
> {{mark.markingUserId}}
> </td>
> <td class="text-center">
>
> <i class="fa fa-pencil fa-2x" title="Wijzig score"
> ng-click="" onmouseover="this.style.cursor='pointer'"></i>
> <i class="fa fa-trash-o fa-2x" title="Verwijder score"
> ng-click="" onmouseover="this.style.cursor='pointer'"></i>
>
> </td>
> </tr>
> </table>
> </div>
>
> *<!--Directive Grid controller-->*
> (function () {
> 'use strict';
>
> // Controller name is handy for logging
> var controllerId = 'crudgridController';
>
> // Define the controller on the module.
> // Inject the dependencies.
> // Point to the controller definition function.
> angular.module('app').controller(controllerId, ['$scope', '$element',
> '$attrs', '$location', '$routeParams', 'common', 'config', 'datacontext',
> '$filter', '$mdDialog', 'timeoutFactory', 'ngTableParams',
> crudgridController])
>
> function crudgridController($scope, $element, $attrs, $location,
> $routeParams, common, config, datacontext, $filter, $mdDialog,
> timeoutFactory, ngTableParams) {
>
> 'use strict';
> var vm = this;
>
> //// ---------------- PUBLIC -----------------
>
> //// PUBLIC fields
>
> vm.tableParamsMark = new ngTableParams({});
>
> // All items
> vm.allItems = [];
>
> // The item being added
> vm.newItem = {};
>
> // The column used for ordering
> vm.orderByColumn = '';
>
> // Indicates if the ordering is reversed or not
> vm.orderByReverse = false;
>
> // Filter
> vm.filter = "";
>
> // Written filter text, this is not the applied one (performance
> tunning)
> vm.filterText = "";
>
> //// PUBLIC Methods
>
> // Creates the 'newItem' on the server
> vm.createItem = _createItem;
>
> // Gets an item from the server using the id
> vm.readItem = _readItem;
>
> // Updates an item
> vm.updateItem = _updateItem;
>
> // Deletes an item
> vm.deleteItemWithConfirmation = _deleteItemWithConfirmation;
> vm.deleteItem = _deleteItem;
>
> // Get all items from the server
> vm.getAllItems = _getAllItems;
>
> // Set the order by column and order
> vm.setOrderByColumn = _setOrderByColumn;
>
> // Adds the item to the collection (no server communication)
> vm.itemDeleted = _itemDeleted;
>
> // Removes an item from the collection (no server communication)
> vm.itemCreated = _itemCreated;
>
> /* Logging functions */
>
> var getLogFn = common.logger.getLogFn;
> var log = getLogFn(controllerId);
>
> //// ---------------- CODE TO RUN ------------
> activate();
>
> //// ---------------- PRIVATE ----------------
>
> //// PRIVATE fields
> //var _itemsService;
> var _createItemThrottle = timeoutFactory.getTimeout(500);
> var _updateItemThrottle = timeoutFactory.getTimeout(500);
> var _filterThrottle = timeoutFactory.getTimeout(500);
>
> //// PRIVATE Functions - Public Methods Implementation
> function activate() {
> common.activateController([_getAllItems($scope.ngNode,
> $scope.ngSelectedAssessed)], controllerId)
> .then(function () {
> _setTableParamMark();
> log('Retrieved Marks');
> });
> }
>
> var _setTableParamMark = function () {
>
> vm.tableParamsMark = new ngTableParams({
>
> page: 1, // show first page
> count: 15, // count per page
> sorting: {
> date: 'asc' // initial sorting
> }
>
> }, {
> total: vm.allItems.length,
> // set in default
> getData: function ($defer, params) {
>
> vm.allItems = params.sorting() ?
> $filter('orderBy')(vm.allItems, params.orderBy()) :
> vm.allItems;
> }
> });
> }
>
> function _createItem(item) {
> if (_isValid(item)) {
> datacontext.mark.add(mark).then(function () {
> // Add at the first position
> vm.allItems.unshift(createdItem);
> });
> }
> };
>
> function _readItem(itemId) {
> return datacontext.mark.getById(itemId);
> };
>
> function _updateItem(item) {
> if (_isValid(item)) {
> // Only update if there are changes
> if (_isDirty(item)) {
> datacontext.mark.update(mark)
> .then(function () {
> _copyItem(response, item);
> });
>
> }
> }
> };
>
> function _deleteItemWithConfirmation(item) {
> bsDialog.deleteDialog('Mark')
> .then(confirmDelete);
>
> function confirmDelete() {
> datacontext.mark.remove(row.MarkId)
> .then(function () {
> var index = vm.allItems.indexOf(item);
> vm.allItems.splice(index, 1);
> return true;
> });
> }
> };
>
> function _deleteItem(item) {
> datacontext.mark.remove(row.MarkId)
> .then(function () {
> var index = vm.allItems.indexOf(item);
> vm.allItems.splice(index, 1);
> return true;
> });
> }
>
> function _getAllItems(node,assessed) {
> //vm.loading = true;
> return datacontext.mark.getAll(node.treeObjectId,
> assessed.assesUserId)
> .then(function (data) {
> vm.allItems = data;
> vm.tableParamsMark.reload();
> return data;
> });
> };
>
> function _setOrderByColumn(column) {
> if (vm.orderByColumn == column) {
> // change order
> vm.orderByReverse = !vm.orderByReverse;
> } else {
> // order using new column
> vm.orderByColumn = column;
> vm.orderByReverse = false;
> }
>
> _applyOrder();
> }
>
> function _itemDeleted(item) {
> var index = vm.allItems.indexOf(item);
> vm.allItems.splice(index, 1);
> }
>
> function _itemCreated(item) {
> // add to the list of items
> vm.allItems.unshift(item);
> }
>
> //// PRIVATE Functions
>
> function _isValid(item) {
> var isValid = true;
>
> // validate all columns
> vm.columnsDefinition.forEach(function (column) {
> if (isValid) {
>
> // required validation
> if (column.required == 'true') {
> isValid = item[column.binding] != undefined;
> }
> }
>
> });
>
> return isValid;
> };
>
> function _isDirty(item) {
> var serverItem = angular.fromJson(item.serverValues);
>
> var isDirty = false;
>
> vm.columnsDefinition.forEach(function (column) {
> if (!isDirty && // short circuit if item is dirty
> (item[column.binding] != serverItem[column.binding])) {
> isDirty = true;
> }
> });
>
> return isDirty;
> };
>
> function _copyItem(itemSource, itemTarget) {
> vm.columnsDefinition.forEach(function (column) {
> itemTarget[column.binding] = itemSource[column.binding];
> });
> }
>
> function _applyOrder() {
> vm.allItems.sort(function (a, b) {
> var comparisonResult = 0;
>
> var aField = a[vm.orderByColumn];
> var bField = b[vm.orderByColumn];
>
> if (aField === null) aField = "";
> if (bField === null) bField = "";
>
>
> if (aField < bField) comparisonResult = -1;
> if (aField > bField) comparisonResult = 1;
>
> if (vm.orderByReverse) {
> comparisonResult = comparisonResult * (-1);
> }
>
> return comparisonResult;
> });
> }
> };
> })();
>
>
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.