javascript - Angular : controller-directive interaction with separation of concerns

标签 javascript angularjs separation-of-concerns

我有一个 AngularJS 模块,它定义了一个很好的指令,可以通过 scr="filename" 属性显示 WebGL 场景。效果很好,(到处剪掉)看起来大致是这样的:

angular.module('ThreeViewer', [])
.directive('three', ['$http', function ($http) {
  return {
    link: function (scope, element, attr) {
      scope.renderer = new SceneRenderer(element[0])
      $http.get(attr.src)
      .success(function (json) {
        var loader = new THREE.ObjectLoader()
        var scene = loader.parse(json)
        this.scene = scene
        this.renderer.setScene(scene)
      }.bind(scope))
    },
    restrict: 'AC',
    scope: {
      src: '='
    }
  }
}])

它所做的就是加载场景,将其保存到范围,然后将其传递给渲染器。这有效。

现在我想创建一个 Controller ,以便用户可以与数据交互,比如旋转对象。我的问题是,在坚持关注点分离的 Angular 范式的同时,应该如何解决这个问题?据我了解,在 Angular 中, Controller 应该能够在没有指令的情况下工作,反之亦然——无需相互了解。这是否意味着 Controller 无法直接修改 scope.scene 对象?那么该怎么做呢?

作为猜测, Controller 是否应该在不知道它在旋转什么的情况下“旋转”?那么指令应该如何选择它呢?

或者, Controller 编辑 scope.scene 是否完全正常?那么我的问题是如何打破它的孤立状态?

最佳答案

我会将场景逻辑(包括加载/解析)放入一个自己的服务中(或多个,一个用于json解析,一个用于旋转等)。我认为 conrollerscene 对象传递给 service 没有问题,它不应该包含特定的逻辑,因为它的 Angular 色应该只是在包含逻辑的服务 View 之间进行调解。

对于范围界定,我将使用 controllercontrollerAs 参数实例化指令的 SceneController(例如),并将场景附加到该指令 Controller 。这样,SceneController 就是一个特定的 Controller ,为场景提供丰富的 View 和控件。

关于javascript - Angular : controller-directive interaction with separation of concerns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30753814/

相关文章:

javascript - YUI 对一个 div 进行动画处理并在另一个 div 中淡入淡出

django - 对 Django + AngularJS 现实世界示例进行分类

web - Dart 是如何实现横切关注点的?

javascript - 使用 Angular UI Bootstrap 禁用静态选项卡?

angularjs - 指令 : how to evaluate ng-options in parent scope

javascript - 使用不同的 ng-controller 和 ng-include

c# - 如何使用 Linq-2-Sql 将域逻辑与数据库/持久性逻辑分开?

javascript - iframe 中的全屏弹出窗口(featherlight)

Javascript:如何在没有 jQuery 或 AJAX 的情况下将 JSON 对象作为文件加载?

c# - Fineuploader 和 MVC4