我应该如何在角度指令中绑定元素的样式?

时间:2013-05-23 19:34:06

标签: data-binding angularjs styles bind directive

我想在指令中绑定一个绝对定位元素的top样式。这可能吗?

以下是我想在编写代码中

angular.module('exampleModule').directive('resize', [function () {

    return {

      link: function(scope, iElement, iAttrs) {

        var top = 14;

        // There is no styleChange event
        iElement.bind('styleChange', styleChangeHandler);

        function styleChangeHandler(event) {
          if(event.style == 'top' && event.value != top) {
            scope.$apply(function(scope){
              scope[iAttrs.topChanged](event.value);
             });
          }
        }
      }
    }

}]);

2 个答案:

答案 0 :(得分:4)

没有样式更改事件。如果您控制样式更改,则可以创建自定义事件并手动触发。或者您可以创建一个监视功能,如下所示:

link: function(scope, iElement, iAttrs) {
  //...
  scope.$watch(function(){
    return iElement.css('top');
  },styleChangeFn,true);

  function styleChangeFn(value,old){
    if(value !== old)
      scope[iAttrs.topChanged](value);
  }
}

答案 1 :(得分:0)

所以这就是我想出的结果(joakimbl的回答很有帮助)。它适用于观看任何风格。

指令:

angular.module('unwalked.directives').directive('watchStyle', [function () {

  return {

    link: function(scope, iElement, iAttrs) {

      scope.$watch(function(){
        return iElement.css(iAttrs['watchedStyle']);
      },
      styleChanged,
      true);

      function styleChanged(newValue, oldValue) {
        if(newValue !== oldValue) {
          scope[iAttrs['watchStyle']](newValue);
        }
      }

    }
  };

}]);

用法(注意:回调中没有括号 - 它只是函数名称):

<div watch-style="functionOnController" watched-style="height" >