javascript - 将工厂/服务对象隔离到单个元素的指令

标签 javascript css angularjs

我有一个由 2 个属性指令(名为 centerPage 和 keeleft)共享的工厂服务。有多个元素使用这些指令中的一个或两个。这是代码,然后我将解释我遇到的问题。

app.factory("style", function(){
    return{
        style: {}
    }
});

app.directive("centerPage", ['style', function (style) {
    return function (scope, element, attrs) {
        var winW = window.innerWidth;
        var winH = window.innerHeight;

        var boxW = 370;
        var boxH = 385;

        scope.style = style;
        scope.style.left = (winW / 2) - (boxW / 2);
        scope.style.top = (winH / 2) - (boxH / 2);
    }
}]);

app.directive("keepleft", ['style', function (style) {
    return function (scope, element, attrs) {
        scope.style = style;
        scope.style.cursor = 'default';
        scope.style.transform = 'translateX(-60%)';
    }
}]);

<started-box center-page keepleft></started-box>

<action-box center-page></action-box>

问题是只有一个

style

对象在所有元素之间共享。 因此,两个指令中的所有 css 都将应用于元素,即使它们只使用其中一个指令也是如此(假设页面上的另一个元素使用两个指令)。

如何隔离作用域,以便仅在单个元素的指令之间共享样式对象?

我不想在这里创建困惑的代码。希望它应该只是对范围的简单调整。请不要使用凌乱的 Controller 。

非常感谢您的帮助。

最佳答案

所以这里的问题是因为共享对象。您可以修改工厂以根据名称返回新对象。

app.factory("style", function(){
  var _cache = {};
  return function(name) {
    if (!_cache[name]) {
      _cache[name] = {};
    }
    return _cache[name];
  };
});

然后你的指令可以做到这一点

scope.style = style(attrs.centerPage);
scope.style = style(attrs.keepleft);

和 HTML

<started-box center-page="group1" keepleft="group1"></started-box>
<action-box center-page="group2"></action-box>

P/s:我想你也可以乱用 element,IIRC 每个 element 都是唯一的并且有某种 id,我只是不记得是什么以及如何获得 id (我已经离开 Angular 几个月了)。当您可以获得元素的 id 时,您可以删除整个 attrs 东西

关于javascript - 将工厂/服务对象隔离到单个元素的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34052656/

相关文章:

javascript - History.pushState 和页面刷新

javascript - 在 for 循环中初始化的变量的作用域规则

javascript - 构建扑克概率计算器 - 如何收集有关不断删除和重新创建的对象的数据?

css - 图像上的 Webkit 转换未在移动设备上显示

html - 先前的 DIV 关系

javascript - 未收到 iOS 推送通知(Firebase 云功能)

css - 没有 JavaScript 的简单等高 DIV 可能吗?

javascript - ng-repeat images,找不到空图像,为什么?

javascript - 在angular js中,如何将数据从父 Controller 传递到子 Controller ?

angularjs - 从时刻js中的日期获取葡萄牙语中的星期几