Service、Provider 和 directive 之间的明显区别 -> controller

Clear differences between Service, Provider and directive -> controller

所以,我的印象是 Angularjs 可能有点冗长,我想清楚地了解以下功能之间的主要区别是什么以及它们何时使用。我'feel'我明白了,但是线条有点模糊和空灵,所以我希望其他人澄清。

  1. 两者在用法上有什么区别:它们在职责和用法上似乎可以互换。

    一个。服务

    乙。工厂

    摄氏度。供应商

  2. module.controller 和 module.directive.controller 有什么区别? 即:


var app = angular.module("someApp",[]);
app.controller("someCtrl1", 函数(){
       // 一些代码
});
</pre>

和这种用法,当它位于指令中时

app.directive("someDirective", function() {
  return {
    restrict: 'E',
    template: '<p>Hello {{name}}!</p>',
    controller: function($scope, $element){
      $scope.name = $scope.name + "post1 ";
    },
    link: function(scope, el, attr) {
      scope.name = scope.name + "post2 ";
    }
  }
}) 

指令的return里面的"controller"有点看不懂。更详细地说,这个约定是什么?

  1. 简而言之,Service 是工厂的包装器,而工厂是提供者的包装器。 该服务使用 JS 构造函数语法,而工厂使用 JS 函数语法。 BUT,service/factory 和提供程序之间有一个很大的区别,即在配置阶段可以访问提供程序,而前一个则不能。 看到这个好详细answer.

  2. 指令中控制器的主要目的是当指令具有独立的作用域时,它不会耦合到父控制器,因此它有一个独立的控制器。

1.

你可以在this question

上找到明确的答案

另外我可以说:

服务:结构简单

工厂结构复杂

供应商结构更复杂

  1. module.controller 与 module.directive.controller 之间没有区别。

我没听说过用法 module.directive.controller,正确的用法是;

app.directive("myDir", ['$yourService',function($yourService){
   return {
      controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {
            var that = this;
            //add sume property

            that = angular.extend(that, $yourService));
            return that;
        }]
   }
}])

基本上,每个指令都不需要控制器 属性。但是,如果你的指令是终端指令或父指令,而你的子指令需要父指令的一些功能或属性,你需要在指令中自定义控制器。

例如,如果您的 table 指令具有子行和单元格指令,table 必须有一个控制器。