Как обновить выбранные элементы jQueryUI, которые можно выбрать с помощью AngularJS?

Я хотел бы использовать jQueryUI Selectable виджет вместе с AngularJS. Мне удалось включить его с помощью ui-jq jQuery Passthrough директива от AngularUI, которая хорошо работает, чтобы получить желаемый эффект пользовательского интерфейса. Теперь я хочу обновить данные выбранных элементов, используя AngularJS, но не могу найти способ сделать это.

Я нашел директиву AngularUI Sortable, которая может быть хорошей отправной точкой для реализации директивы Selectable, но, поскольку я только начал работать с AngularJS, у меня возникли проблемы с адаптацией к моим потребностям.

Пример:

http://jsfiddle.net/ffeldha/2KzRt/

Как я могу обновить название выбранных предметов?

1 ответ

Решение

Вы можете создать директиву для выбора без использования angular-ui и добавлять элементы с помощью addItem() метод в области

HTML:

<ol ui-selectable>

JS

var myApp = angular.module('soil', [])

myApp.directive('uiSelectable', function () {
    return function (scope, el, attrs) {
        el.selectable();
    };
});

function ItemCtrl($scope) {
    /* triggered by "ng-submit" on a form*/
    $scope.addItem = function () {
        /* newItem comes from "ng-model" on an input*/
        if (!$scope.newItem.length) {
            return;
        }
        $scope.items.push({
            name: $scope.newItem
        });

        $scope.newItem = '';
    };
    $scope.newItem = '';
    $scope.items = [{
        name: 'one'
    }, {
        name: 'two'
    }, {
        name: 'three'
    }];
}

ДЕМО: http://jsfiddle.net/2KzRt/5/

Обновление Вот как создать динамический набор моделей для обновления элементов списка при выборе:

HTML:

    <div id="update_items" ng-show="updateItems.length">
        <div ng-repeat="item in updateItems"> 
           <input value="{{item.name}}" ng-model="items[item.index].name"/>
        </div>
        <button ng-click="updateItems=[]">Cancel</button>
    </div>

JS:

var myApp = angular.module('soil', [])

myApp.directive('uiSelectable', function () {
    return function (scope, el, attrs) {
        el.selectable({
            stop:function(evt,ui){

                var selected=el.find('.ui-selected').map(function(){
                    var idx=$(this).index();
                    return {name: scope.items[idx].name, index:idx}
                }).get();

                scope.updateItems=selected;
                scope.$apply()
            }
        });
    };
});


function ItemCtrl($scope) {

    $scope.addItem = function () {
        if (!$scope.newItem.length) {
            return;
        }
        $scope.items.push({
            name: $scope.newItem
        });

        $scope.newItem = '';
    };
    $scope.newItem = '';
    $scope.updateItems=[];
    $scope.items = [{
        name: 'one'
    }, {
        name: 'two'
    }, {
        name: 'three'
    }];
}

ДЕМО: http://jsfiddle.net/2KzRt/7/

Другие вопросы по тегам