javascript – 在指令之间共享公共代码

前端之家收集整理的这篇文章主要介绍了javascript – 在指令之间共享公共代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究一个角度项目的核心,并希望将行为尽可能地分开,以便跨多个组件重用.一个例子可能是使用’iScroll’库来提取 – 刷新一些内容.目前,我遇到了问题,因为许多这些行为都需要自己的范围.我认为将服务中的行为包裹起来可能是可行的方法,但我还没有真正看到很多这类事情的例子.所以我想知道这是否是正确的方法.这是一个非常非常简单的jsfiddle示例:

http://jsfiddle.net/S7kC7/

  1. var controls = angular.module('controls',[]);
  2. controls.service('ScrollingBehavior',function () {
  3. this.link = function ($scope,$element) {
  4. $element.addClass('scrolling');
  5. }
  6. });
  7.  
  8. controls.directive('scrolling',['ScrollingBehavior',function (ScrollingBehavior) {
  9. //pretend that this has its own individual scope
  10. return {
  11. restrict: 'A',link: function ($scope,$element) {
  12. console.log("Linking scrolling");
  13. ScrollingBehavior.link($scope,$element);
  14. }
  15. }
  16. }]);
  17.  
  18. controls.directive('panel',function (ScrollingBehavior) {
  19. return {
  20. restrict: 'E',transclude: true,replace: true,template: '<div ng-transclude></div>',//pretend that this has its own individual scope
  21. link: function ($scope,$element) {
  22. console.log("Linking panel");
  23. ScrollingBehavior.link($scope,$element);
  24. }
  25. }
  26. }]);

我的想法是,我会暴露某些预期的方法(即“链接”,“控制器”),这些方法可以在需要这些行为或特征的其他指令中使用.由于作用域是一个对象并通过引用传递,它可以像只是复制/粘贴代码一样挂钩.

这样做有问题吗?服务可以被视为服务于某种“混合”的东西吗?再一次,我只是问,因为我没有看到任何类似这样的例子.

[注意:我不确定,但也许这属于代码审查网站?]

解决方法

我相信这样做的“有角度”方法是创建一个scrollingBehavior指令并将其添加到其他指令中,并根据需要进行嵌套.

[编辑]使用隔离范围更新了jsfiddle和示例代码.

http://jsfiddle.net/8dYYk/

  1. <div scrolling-with-scrolling-behavior>This should have a scroll bar</div>
  2. <div scrolling><div scrolling-behavior>This should have a scroll bar</div></div>
  3. <panel scrolling-behavior>This should also have a scroll bar</panel>
  4.  
  5.  
  6. controls.directive('scrollingBehavior',function () {
  7. return {
  8. restrict: 'A',scope: { 'behavior': '=' },$element) {
  9. $element.addClass('scrolling');
  10. }
  11. }
  12. });
  13.  
  14. controls.directive('scrolling',function () {
  15. //pretend that this has its own individual scope
  16. return {
  17. restrict: 'AE',scope: { 'otherThing': '=' },$element) {
  18. console.log("Linking scrolling");
  19. }
  20. }
  21. });
  22.  
  23. controls.directive('scrollingWithScrollingBehavior',template: '<div scrolling-behavior><div scrolling ng-transclude></div><div>'
  24. }
  25. });

猜你在找的JavaScript相关文章