Angular Material и md-list - проблема с дополнительным действием
В Angular Material есть такой хороший компонент - md-list
, и работающий с ним в паре md-list-item
. Из них можно делать красивые списки, обладающие весьма важными свойствами. Во-первых, каждая строка реагирует на нажатие. Можно реализовать возможность перехода по ссылке. Во-вторых, к каждой строке можно добавить кнопку действия.
Это я всё к чему? А к тому, что сегодня почти час убил на то, чтобы разобраться, почему скопированный почти один в один пример с официальной доки работает у них и не работает у меня.
Разметка
<md-list>
<md-list-item ng-repeat="item in items" ng-click="openDetail(item)">
<img class="md-avatar" alt="" src=""/>
<p>{{ item.name }}</p>
<md-icon class="material-icons md-secondary md-warn" ng-click="remove(item)">remove</md-icon>
</md-list-item>
</md-list>
Вся проблема заключалась в классах CSS для тега
md-icon
. Чтобы он превратился в кнопку, ему должен быть назначен среди прочих класс md-secondary
.Если кому интересно, то ниже код контроллера. Обратите внимание, я не отлавливаю объект события и не вызываю для него stopPropagation()
и preventDefault()
, это не требуется.
ctrl.js
(function (A) {
"use strict";
var inject = [
'$location',
'$mdDialog',
'$scope'
];
function Ctrl(
$location,
$mdDialog,
$scope
){
// Ничто не мешает загружать записи с сервера
$scope.items = [
{id: 1, name: 'Запись №1'},
{id: 2, name: 'Запись №2'},
{id: 3, name: 'Запись №3'},
{id: 4, name: 'Запись №4'}
];
function openDetail(item){
// Переход на другой вид
$location.path('/items/' + item.id);
}
function remove(item){
// Запрос на удаление записи
$mdDialog.show(
$mdDialog
.confirm()
.title("Подтверждение")
.content('Удалить "' + item.name + '"?')
.ok("Да")
.cancel("Нет")
).then(function () {
$scope.items = $scope.items.splice($scope.items.indexOf(item), 1);
});
}
$scope.openDetail = openDetail;
$scope.remove = remove;
}
Ctrl.$inject = inject;
A.module('app').controller('Ctrl', Ctrl);
}(this.angular));
Подписаться на:
Комментарии к сообщению
(
Atom
)
Комментариев нет :
Отправить комментарий