角度 - 倾听变化的聆听

时间:2013-10-21 08:45:13

标签: angularjs angularjs-directive

我有一个简单的指令

angular.module('myApp')
    .directive('myDirective', function () {
        return {
            template: '<p ng-transclude></p>',
            restrict: 'A',
            transclude: true,
            link: function postLink(scope, element, attrs) {
            }
        }
    }
);

我试图在每次翻译内容更改并呈现指令时运行代码 - 我需要已转换的内容。

我想在这种情况下运行的算法示例是:

  • 计算被抄送内容的字数。

我尝试了多种形式的scope.$watch,但无济于事。

1 个答案:

答案 0 :(得分:11)

我们可以在监视表达式函数中使用Angular中包含的jqlite来完成此任务。下面是使用jqLit​​e(element.text()。length)监视transcluded元素长度的代码。只要附加了该指令的元素的长度发生变化,手表就会触发。

新长度作为newValue传递给监视中的第二个函数(因为我们从第一个监视函数返回它)。

  myApp.directive('myDirective', function () {
     return {
        template: '<p ng-transclude></p>',
        restrict: 'A',
        transclude: true,
        replace: true,
        link: function (scope, element, attrs) {

           scope.$watch(function () {
               return element.text().length;
           },

           function (newValue, oldValue) {
               console.log('New Length ', newValue);
          });
        }
      }
  });

我在这里有一个工作的jsfiddle:

http://jsfiddle.net/2erbF/6/

这解决了单词/字母计数方案。但是你可以在element.text()本身上编写一个测试,如果你需要它来解决任何变化 - 而不仅仅是长度变化。