我需要一个接受鼠标点击并且其状态取决于模型的自定义 DOM 元素:-
<card ng-repeat="card in cards" x="card.x"
y="card.y" color="card.color" on-click="test_click('b')">
</card>
我能够构建一个自定义指令,该指令通过其 DOM 属性绑定到控制器的范围变量,并使用它们来更改其视图。我通过允许指令继承其父范围来实现此目的:
app.directive('card', function ($timeout) {
return {
restrict:'E',
link:function (scope, element, attrs) {
element.addClass('card');
element.click(function(){
scope.onClick()
});
scope.$watch(attrs.x, function (x) {
element.css('left', x + 'px');
});
scope.$watch(attrs.y, function (y) {
element.css('top', y + 'px');
});
scope.$watch(attrs.color, function (color) {
element.css('backgroundColor', color);
});
}
/*
,scope:{
x:'=',
y:'=',
color:'=',
onClick: "&"
}
*/
};
});
通过创建一个隔离的范围并进行一些重新布线(通过在上面评论范围),我可以让鼠标单击事件传播到控制器。
但是,我无法让这两种行为同时发挥作用。
我想我需要将 x 变量绑定到属性值,这是我试图做的。但即使尝试了我能想到的每一种语法组合,我似乎也无法让它发挥作用。
这是完整的案例jsfiddle