Что я делаю: я создаю две директивы атрибута: один перемещает элемент влево, а другой центрирует элемент на странице. См. Код ниже. Обратите внимание, что я манипулирую 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'
};
}]);
Создайте службу стиля и введите ее в обе директивы. Услуги превосходны для совместного использования состояний между директивами/контроллерами.