0

我有一堆看起来都一样的Angular指令,比如(更复杂的版本)

app.directive('note', function () {
    return {
        restrict: 'E',
        transclude: true,
        template: '<div class="' + 'note' + '"></div>
    }
});

取而代之note的是许多其他的东西。我想在一个循环中定义它们以保持干燥。我试过了

var dirs = ['note', 'introduction', 'thing'];

for (var dir, i = 0; dir = dirs[i]; i++) {
    app.directive(dir, function () { ... });
}

无济于事。有没有好的方法来做到这一点?

4

2 回答 2

2

我认为你不应该这样做。相反,您应该将值传递给指令。但是,如果您真的觉得需要这样做,它确实可以正常工作:fiddle

HTML:

    <div ng-app="myApp">

        <div ng-controller="MyCtrl">
          Hello, {{name}}!
        </div>
        <introduction> </introduction>
        <note></note>
        <thing></thing>
        <notAThing></notAThing>
    </div>

JS:

    var myApp = angular.module('myApp',[]);

    var dirs = ['note', 'introduction', 'thing'];

    angular.forEach(dirs, function(dir) {
        myApp.directive(dir, function() {
            return {
                restrict: 'E',
                transclude: true,
                template: '<div class="' + dir + '">something</div>'
            }
        });
    });
于 2013-07-05T23:10:50.400 回答
0

我得说这可能是我说话的菜鸟,但如果你知道你在做什么,我真的不认为这是一个大问题:

(function() {
  var createDirective, module, pluginName, _i, _len, _ref;

  module = angular.module('FacebookPluginDirectives', []);

  createDirective = function(name) {
    return module.directive(name, function() {
      return {
        restrict: 'C',
        link: function(scope, element, attributes) {
          return typeof FB !== "undefined" && FB !== null ? FB.XFBML.parse(element.parent()[0]) : void 0;
        }
      };
    });
  };

  _ref = ['fbActivity', 'fbComments', 'fbFacepile', 'fbLike', 'fbLikeBox', 'fbLiveStream', 'fbLoginButton', 'fbName', 'fbProfilePic', 'fbRecommendations'];
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    pluginName = _ref[_i];
    createDirective(pluginName);
  }

}).call(this);

^ 顺便说一句,这不是我的代码,只是我捡到并为我工作的东西。解决方法是,如果您将类设置为数组中的任何值,那么它将尝试让 facebook javascript 解析节点/元素。

于 2013-07-05T23:13:39.993 回答