Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data binding 我应该如何绑定到元素';在一个角度的指令中是什么样的风格?_Data Binding_Angularjs_Styles_Bind_Directive - Fatal编程技术网

Data binding 我应该如何绑定到元素';在一个角度的指令中是什么样的风格?

Data binding 我应该如何绑定到元素';在一个角度的指令中是什么样的风格?,data-binding,angularjs,styles,bind,directive,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 iEl

我想绑定到指令中绝对定位元素的
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);
             });
          }
        }
      }
    }

}]);

没有样式更改事件。如果您可以控制样式更改,则可以创建自定义事件并手动触发该事件。或者你可以创建一个手表功能,类似这样:

链接:功能(范围、IELENT、iAttrs){
//...
范围$watch(函数(){
返回iElement.css('top');
},styleChangeFn,true);
函数styleChangeFn(值,旧){
如果(值!==旧)
范围[iAttrs.topChanged](值);
}
}

没有样式更改事件。如果您可以控制样式更改,则可以创建自定义事件并手动触发该事件。或者你可以创建一个手表功能,类似这样:

链接:功能(范围、IELENT、iAttrs){
//...
范围$watch(函数(){
返回iElement.css('top');
},styleChangeFn,true);
函数styleChangeFn(值,旧){
如果(值!==旧)
范围[iAttrs.topChanged](值);
}
}

以下是我的想法(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);
        }
      }

    }
  };

}]);
用法(注意:回调上没有括号-只是函数名):


以下是我的想法(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);
        }
      }

    }
  };

}]);
用法(注意:回调上没有括号-只是函数名):



这不起作用,因为styleChangeFn不在范围内,但谢谢。这让我走上了正确的道路。我假设
styleChangeFn
将在link函数中声明,并且可以访问作用域,进行了更新以澄清问题是
scope
styleChangeFn
@Pedr中不可用,因为
styleChangeFn
是在link函数中定义的,范围在
styleChangeFn
中可用。这是我的想法,但范围似乎有所改变。以下内容用作回调(如果您在前面声明
var self=this;
):
函数(newValue,oldValue){testFunction.call(self,newValue,oldValue)}
。也许我在做一些奇怪的事情…这不起作用,因为styleChangeFn不在范围之内,但是谢谢。这让我走上了正确的道路。我假设
styleChangeFn
将在link函数中声明,并且可以访问作用域,进行了更新以澄清问题是
scope
styleChangeFn
@Pedr中不可用,因为
styleChangeFn
是在link函数中定义的,范围在
styleChangeFn
中可用。这是我的想法,但范围似乎有所改变。以下内容用作回调(如果您在前面声明
var self=this;
):
函数(newValue,oldValue){testFunction.call(self,newValue,oldValue)}
。也许我在做一些奇怪的事。。。