0
我有一个由2个属性指令(名为centerPage和keepleft)共享的工厂服务。有多个元素可以使用这些指令中的一个或两个。这是代码,然后我会解释我遇到的问题。将工厂/服务对象隔离到单个元素的指令
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>
的问题是,只有一个
风格
对象被所有元素之间共享。 因此,即使只使用指令中的1个(假设页面上的另一个元素使用两个指令),来自两个指令的所有css都将应用于元素。
如何隔离范围以便样式对象仅在单个元素的指令中共享?
我不想在这里创建乱码。它应该只是对范围的简单调整。请没有凌乱的控制器。
非常感谢您的帮助。
我花了很多时间来解决这个问题,但不幸的是它似乎并不奏效。这也不是一个语法问题。这是关于范围更基本的东西,但我整天试图找出它的头撞墙:( – dragonfire
它设置正确的样式,但是我在元素中有ng-style =“$ parent.style” – dragonfire
我不知道你是如何放置范围的,但从你所描述的内容来看,这可能是嵌套范围的问题。基本上如果你使用共享范围,'style'属性将被嵌套的作用域覆盖,这对我来说更容易看到你是否在jsfiddle或类似服务中有完整的示例设置 –