2017-02-06 2 views
0

Я просто не понимаю этого. На the smart-table web page, где он обсуждает att12ubbute, я не вижу, где объявляется $scope. displayedCollection.Является ли документация/демонстрационная версия смарт-таблицы AngularJS ошибкой?

Текст говорит smart-table first creates a safe copy of your displayed collection, и я

Я предположил, что директива смарт-таблица объявлял, но пример кода не будет работать для меня - строки таблицы пусты - и это то, что выглядит я должен быть проблемой.

Если мы посмотрим, например, на принятый ответ this question, мы объявим $scope.displayedCollection как пустой массив и присвоим ему значение при получении ответа AJAX. НО, документация не упоминает об этом.

<table st-table="displayedCollection" st-safe-src="rowCollection"> 
     <thead> 
     <tr> 
      <th st-sort="firstName">First Name</th> 
      <th st-sort="lastName">Last Name</th> 
     </tr> 
     </thead> 
     <tbody> 
     <tr ng-repeat="row in displayedCollection"> 
      <td>{{row.firstName}}</td> 
      <td>{{row.lastName}}</td> 
     </tr> 
     </tbody> 
</table 


app.controller('Ctrl', function($scope, service) { 
    $scope.displayedCollection = []; 

    service.all.then(function(list) { 
     $scope.rowCollection = list; 
     $scope.displayedCollection = list; 
    }); 
}); 

Итак, мне нужно заботиться о копии самостоятельно? Нужно ли обновлять документацию? И как работает демо?


[Update] Я нахожу это на the github issues, от @ Tufan-уос

вы должны скопировать массив данных на другой переменной в области видимости:

st-table="displayedCollection" st-safe-src="rowCollection" 

и

//copy the references (you could clone ie angular.copy 
// but then have to go through a dirty checking for the matches) 
    $scope.displayedCollection = [].concat($scope.rowCollection); 

Если это действительно требование, почему это не документировано?

И почему этот пример на веб-сайте смарт-стола работает без него?

ответ

0

Нет, это не багги. SmartTables создаст объект $scope.displayedCollection или любое другое имя, которое вы используете для массива, который будет хранить копию исходных данных, если вы используете атрибут stSafeSrc. Если он не показывает, какие данные проверяют ваш объект rowCollection, он должен содержать исходный массив. Если вы работаете в Chrome, попробуйте ng-inspector for AngularJS, чтобы вы могли видеть область вашего приложения. Кроме того, если вы можете разместить плункер вашего кода, это будет лучше.

0

Мы можем показать, что пользователь должен принять меры, чтобы сделать acopy и сохранить его в синхронизации с данными AJAX, посмотрев на this Plunk (это не мое).

Если закомментировать строки 18:

$scope.displayedCollection = [].concat($scope.rowCollection); 

согласно онлайн, например, таблица становится пустым.

Вывод: документация сайт неправильно говорить

смарт-стол первым создает безопасную копию отображаемой коллекции

И, как ни странно, в (работы), например, на веб-сайте. .. не должен работать (?)

1

Вам ничего не нужно копировать. то, что вы установили с помощью атрибута st-table, просто является заполнителем для ваших шаблонов (т. е. переменной в области), которую вы, скорее всего, будете использовать в повторителе строки, его не нужно объявлять нигде, смарт-таблица будет назначать элементы для отображения этой переменной, чтобы ваши шаблоны могли обновляться.

Ваш источник правды (то есть ваши данные) должен быть сборником, который вы связываете с атрибутом st-safe-src. Всякий раз, когда связанная коллекция изменяется, интеллектуальная таблица обновляет локальную копию, поэтому она может выполнять операции filter/sort/slice на основе последних и фактических данных.

Однако для удобства (и производительности), если вы не намерены изменять свои данные (или его приход не задерживается, как при использовании ajax fetch), внутренняя копия сначала основана на любой коллекции, связанной с переменной в области разработанный атрибутом st-table. Обратите внимание, что в этом случае значение будет стерто и заменено отображаемой коллекцией, чтобы шаблон обновлялся. К счастью, исходная копия будет сохраняться как приватная переменная smart-table.

Если вы столкнулись с проблемой, это, скорее всего, происходит откуда-то еще. Если да, укажите пример работы (с угловой версией и версией смарт-стола)

+0

Это работает только для меня, если я делаю копию в своем коде, а не когда нет. Мой код слишком большой для публикации, но вы можете видеть то же самое по адресу http://plnkr.co/edit/s407ao?p=preview, комментируя строку 18 – Mawg

+1

смарт-таблицы и угловые версии, которые вы используете на плункерах. довольно старый ... – laurent

+0

Это может объяснить это (+1). Я попытаюсь найти время для обновления Plunk (хотя я работаю с самой новой версией дома и все еще имею такую ​​же ситуацию). – Mawg