Я новичок в AngularJS, и я немного борюсь с моими многочисленными взглядами. Может быть, кто-то может пролить свет на то, как это должно быть сделано.Правильное использование представлений и подзонов в AngularJS
Что я пытаюсь достичь: Я пытаюсь реализовать какой-то файловый проводник, где есть два столбца: левый столбец содержит все подпапки и файлы в папке, правый столбец показывает подробные сведения, когда файл или папка. Когда пользователь дважды щелкает по папке, представление должно обновляться и перечислить подпапку, в то время как столбец подробностей должен быть очищен.
Это в основном работает более или менее, но левая колонка освежает всегда, даже если это не так. И я уверен, что это очень хаки, но я не знаю, как это улучшить.
Я использую ui-router для множественных представлений и Restangular для REST-вызовов, которые я заменил фиктивными данными в этом примере.
Бутстрапирование:
// app.js
var app = angular.module('explorer', ['ui.compat']);
Это мой основной шаблон:
// app.html
[...]
[...]
<div ui-view></div>
Это шаблон контейнера, который загружается в самом начале:
// files.html
<div ui-view></div>
<div ui-view="details"></div>
Это шаблон для списка файлов слева:
// files-list.html
<table>
<thead>
<tr>
<th>Filename</th>
<th>Size</th>
<th>Modified</th>
</tr>
</thead>
<tbody>
<tr data-ng-repeat="file in files">
<td><a href="#/{{ file.type }}/{{ file.id }}">{{ file.name }}</a></td>
<td>{{ file.size }}</td>
<td>{{ file.modified }}</td>
</tr>
</tbody>
</table>
И это детали шаблона:
// files-details.html
<div>{{ file.name }}</div>
Это первый контроллер для отображения списка в левой колонке (извините, это CoffeScript):
app.controller 'ListController', ['$scope', '$state', ($scope, $state) ->
$scope.files = [{
"id": "12", "type": "folder", "name": "testfolder", "size": "", "modified": "01.01.2000"
}, {
"id": "54", "type": "file", "name": "testfile", "size": "23kb", "modified": "01.01.2000"
}]
]
И это подробности контроллер:
app.controller 'DetailsController', ['$scope', '$stateParams', ($scope, $stateParams) ->
$scope.file = { "id": "54", "type": "file", "name": "testfile", "size": "23kb", "modified": "01.01.2000"};
]
И это моя грязная маршрутизация ru les:
app.config ['$stateProvider', '$urlRouterProvider', ($stateProvider, $urlRouterProvider) ->
$urlRouterProvider
.when('/folder', '/folder/1')
$stateProvider.state 'list', {
url: ''
views: {
'': {
templateUrl: 'files.html'
},
'[email protected]': {
templateUrl: 'files-list.html'
controller: 'ListController'
},
'[email protected]': {
templateUrl: 'files-detail.html'
}
}
}
$stateProvider.state 'folder', {
abstract: yes
templateUrl: 'files-list.html'
controller: 'ListController'
}
$stateProvider.state 'folder.list', {
url: '/folder/{id}'
templateUrl: 'files-list.html'
controller: 'ListController'
}
$stateProvider.state 'list.file', {
url: '/file/{childId}'
views: {
'': {
templateUrl: 'files-list.html'
controller: 'ListController'
}
'details': {
templateUrl: 'files-detail.html'
controller: 'DetailsController'
}
}
}
]
Эй, это довольно удивительным! Я уже предполагал, что считаю слишком сложным, особенно гнездо зрения. Спасибо огромное! Это помогло много, и теперь я узнал немного больше об AngularJS (все еще в самом начале, хотя). – acme
Это было мое удовольствие. В любом случае, я хотел что-то сделать для вызова, и это было приятно. Так спасибо вам! –