Создайте объект, чтобы его можно было использовать несколькими директивами

0

Что я делаю: я создаю две директивы атрибута: один перемещает элемент влево, а другой центрирует элемент на странице. См. Код ниже. Обратите внимание, что я манипулирую ng-style чтобы установить эти свойства css (перемещение элемента влево и центрирование на странице).

Проблема:
Когда я использую обе директивы для элемента, вторая директива scope.style={} очевидно, перезаписывает первую.
Это означает, что я не могу одновременно применять оба ng-style.

Мой вопрос:
Что такое простой способ создать экземпляр объекта scope.style чтобы я мог использовать его в обеих директивах без scope.style создания объекта?

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

Пожалуйста, порекомендуйте. Большое спасибо!


Вот html:
Данные взяты из json файла, но это не важно здесь.

<!-- The Element: -->
<started-box center-page keepleft screen="screen[3]"></started-box>

<!-- The Template: -->
<div id="{{screen.id}}" ng-style="$parent.style">
    Some content goes here.
</div>

Вот фрагменты кода AngularJS:

// Two Attribute directives:
app.directive("centerPage", function () {
    return function (scope, element, attrs) {
        var winW = window.innerWidth;
        var winH = window.innerHeight;
        var boxW = 370;
        var boxH = 385;

        scope.style = {};
        scope.style.left = (winW / 2) - (boxW / 2);
        scope.style.top = (winH / 2) - (boxH / 2);
    }
});
app.directive("keepleft", function () {
    return function (scope, element, attrs) {
        scope.style = {};
        scope.style.cursor = 'default';
        scope.style.transform = 'translateX(-60%)';
    }
});

// Directive for the template:
app.directive("startedBox", [function () {
    return {
        restrict: "E",
        replace: true,
        scope: {
            screen: '='
        },
        templateUrl: dir + 'templates/directives/started-box.html'
    };
}]);
Теги:
angularjs-scope
ng-style

1 ответ

1

Создайте службу стиля и введите ее в обе директивы. Услуги превосходны для совместного использования состояний между директивами/контроллерами.

  • 0
    Я добавил следующий сервис. Дело в том, что один и тот же объект стиля используется всеми элементами с помощью одной из директив атрибута. Это означает, что если элемент использует только одну из директив атрибута, он по-прежнему применяется к нему. Как мне изолировать это, чтобы воссоздать объект стиля один раз для каждого элемента? Большое спасибо за ваш ответ. app.factory ("style", function () {return {style: {}}});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню