Angular中声明全局函数在模板中使用的最佳方法是什么?

时间:2014-05-11 09:31:18

标签: javascript angularjs global-variables

在模板中使用函数有两种方法(或者有其他方法吗?)

1。在$ rootScope中声明它:

app.run(function ($rootScope) {
  $rootScope.makeURL = function (url) { 
    return 'http://mysite.ru/' + url;
  }
});

并在模板中:

<a href="makeURL('blog')">go Blog</a>

2。像指令一样去除它:

app.directive('makeURL', function () {
  return {
     link: function ($scope, $element, $attrs) {
        var url = 'http://mysite.ru/' + $attrs.makeurl; // just example

        $element.attr('href', url);
     }
  }
} 

并在模板中:

<div ng-controller="SomeCtrl">
  <a makeURL="blog">go Blog</a>
</div>

或者我需要使用Filter吗?什么是最好的方法?我可以使用$ rootScope这样的东西吗?还是最糟糕的方式?为什么?我需要了解这些事情。


已编辑:我认为这就是答案:Angular JS - Make service globally accessible from controllers and view

1 个答案:

答案 0 :(得分:1)

使用服务

mymodule.service('URL',function(){
 this.make=function(){...}
});

mymodule.controller($scope,URL){
$scope.URL=URL;
}

<a href="{{Url.make(somedata)}}"/>

服务将使您的控制器更易于测试并且您将能够单独测试该服务。如果在angular.run方法中向rootscope添加任何内容,则会更加困难。