Angularjs 处理控制器和数据模型

Angularjs 处理控制器和数据模型,angularjs,model,controller,Angularjs,Model,Controller,我知道最好的做法是使控制器尽可能薄。但控制器是否可能太薄?例如,下面的代码显示了三种情况: 我知道那是最坏的情况。但案例3比案例2更可取吗 我使用硬编码的“Hello World”来简化。实际上,会有返回消息的业务逻辑 var app = angular.module('plunker', []); // model is inside controller (worst case) app.controller('controller1', function() { this.messa

我知道最好的做法是使控制器尽可能薄。但控制器是否可能太薄?例如,下面的代码显示了三种情况:

我知道那是最坏的情况。但案例3比案例2更可取吗

我使用硬编码的“Hello World”来简化。实际上,会有返回消息的业务逻辑

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

// model is inside controller (worst case)
app.controller('controller1', function() {
  this.message = 'Hello World';
});

// template accesses model thru controller. (getting thinner)
app.controller('controller2', function(model) {
  this.message = model.getMessage();
});


// controller pass model to template. (ultra thin)
app.controller('controller3', function(model) {
  this.model = model;
});



app.factory('model', function() {
  return {
    getMessage: function() {
      return 'Hello World'
    }
  }

});
还有HTML

    <body>
      <div ng-controller='controller1 as vm1'>{{vm1.message}}</div>
      <div ng-controller='controller2 as vm2'>{{vm2.message}}</div>
      <div ng-controller='controller3 as vm3'>{{vm3.model.getMessage()}}   </div>
    </body>

{{vm1.message}
{{vm2.message}
{{vm3.model.getMessage()}}

在您的模型返回静态文本的特定情况下,没有区别

但是,想象一下一个调用api的经典数据服务模型

最好在控制器内部解析http调用的承诺,以便管理错误。这一点指向你的案例#2


希望这有助于澄清这种情况

在这种特殊情况下,您的模型返回静态文本没有区别

但是,想象一下一个调用api的经典数据服务模型

最好在控制器内部解析http调用的承诺,以便管理错误。这一点指向你的案例#2


希望这有助于澄清情况

,但仅仅处理基本状态信息又如何呢?像页面上当前选择的内容。让控制器将视图和模型连接在一起(如案例3)并让视图直接访问它似乎更方便。(虽然,我觉得这有点不对劲——这似乎完全削弱了控制器的作用)在模型返回数据之前,没有什么特别的问题,你必须在视图中修改这些数据,以便在视图中显示“某物”(数据、错误、隐藏div ex),如果你必须在视图中放入逻辑,这是一个问题。如果您的模型非常专业,以至于返回的每个数据都由一个简单的视图管理,那么您的方法就没有问题。请记住始终返回对象以避免数据绑定问题,但仅处理基本状态信息如何?像页面上当前选择的内容。让控制器将视图和模型连接在一起(如案例3)并让视图直接访问它似乎更方便。(虽然,我觉得这有点不对劲——这似乎完全削弱了控制器的作用)在模型返回数据之前,没有什么特别的问题,你必须在视图中修改这些数据,以便在视图中显示“某物”(数据、错误、隐藏div ex),如果你必须在视图中放入逻辑,这是一个问题。如果您的模型非常专业,以至于返回的每个数据都由一个简单的视图管理,那么您的方法就没有问题。请记住始终返回对象以避免数据绑定问题