AngularJS - 指令与 Controller

标签 angularjs angularjs-directive controller

我正在尝试使用 AngularJS 创建我的第一个应用程序。但是,如果我需要针对我的特定情况使用指令,我会有点困惑。

我有一个简单的 map 页面,我需要在其中显示所选区域的纬度/经度值。目前我根本没有使用指令。我在 Controller 中做所有事情并使用部分来显示结果。我不打算在任何其他地方重复使用我的 map View 。这就是为什么我觉得我不需要指令。

另一方面,我在某处读到,每次您尝试在 Controller 中操作 DOM(我正在使用 google maps API 进行操作)时,您应该将该部分移至指令。

这是我的简单 Controller :

function MapViewController($scope) {
  $scope.zoom = 6;
  $scope.lat = 37;
  $scope.lon = -122;
  var mapOptions = {
    center: new google.maps.LatLng($scope.lat, $scope.lon),
    zoom: $scope.zoom,
    mapTypeId: google.maps.MapTypeId.HYBRID
  };
  $scope.map = new google.maps.Map(
      document.getElementById('map-canvas'), mapOptions);

  /*
   * Update zoom and other map attributes.
   */
  google.maps.event.addListener($scope.map, 'center_changed', function() {
    $scope.$apply(function () {
      $scope.zoom = $scope.map.getZoom();
      var center = $scope.map.getCenter();
      $scope.lat = center.lat();
      $scope.lon = center.lng();
      var bounds = $scope.map.getBounds();
      var northEast = bounds.getNorthEast();
      $scope.northEastLat = northEast.lat();
      $scope.northEastLon = northEast.lng();
      var southWest = bounds.getSouthWest();
      $scope.southWestLat = southWest.lat();
      $scope.southWestLon = southWest.lng();
    });
  });

  /*
   * Set zoom and other map attributes.
   */
  google.maps.event.addListener($scope.map, 'some event', function() {
    $scope.$apply(function () {
      ...
    });
  });

  /*
   * Add markers to map.
   */
  google.maps.event.addListener($scope.map, 'another event', function() {
    $scope.$apply(function () {
      ...
    });
  });

}

这是我的部分内容:

  <div id="map-controllers" class="span4">
    <form class="form-horizontal">
      <div class="control-group">
        <label class="control-label" for="inputNumber">Zoom:</label>
        <div class="controls">
          <input type="text" class="input-mini" placeholder="zoom" value="{{ zoom }}">
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="inputNumber">Latitude:</label>
        <div class="controls">
          <input type="text" class="input-large" placeholder="Latitude" value="{{ lat }}">
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="inputNumber">Longitude:</label>
        <div class="controls">
          <input type="text" class="input-large" placeholder="Longitude" value="{{ lon }}">
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="inputNumber">North East Latitude:</label>
        <div class="controls">
          <input type="text" class="input-large" placeholder="Latitude" value="{{ northEastLat }}">
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="inputNumber">North East Longitude:</label>
        <div class="controls">
          <input type="text" class="input-large" placeholder="Longitude" value="{{ northEastLon }}">
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="inputNumber">South West Latitude:</label>
        <div class="controls">
          <input type="text" class="input-large" placeholder="Latitude" value="{{ southWestLat }}">
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="inputNumber">South West Longitude:</label>
        <div class="controls">
          <input type="text" class="input-large" placeholder="Longitude" value="{{ southWestLon }}">
        </div>
      </div>
    </form>
  </div>

最佳答案

这是一个简短的独立答案,其中包含指向官方文档的链接以获取更多信息(添加了“服务”的定义以便更好地衡量):
http://docs.angularjs.org/guide/controller
在 AngularJS 中,一个 Controller 是一个 JavaScript 构造函数,用于扩充 AngularJS 范围。
当 Controller 通过 ng-controller 附加到 DOM 时指令,AngularJS 将实例化一个新的 Controller 对象,使用指定 Controller 的构造函数。一个新的子作用域将作为可注入(inject)参数提供给 Controller 的构造函数,如 $scope .
http://docs.angularjs.org/guide/directive
在高层次上,指令 是 DOM 元素(例如属性、元素名称或 CSS 类)上的标记,它告诉 AngularJS 的 HTML 编译器($compile)将指定的行为附加到该 DOM 元素,甚至转换 DOM 元素及其子元素。
http://docs.angularjs.org/guide/services
AngularJS 服务 是使用依赖注入(inject) (DI) 连接在一起的可替代对象。您可以使用服务在您的应用程序中组织和共享代码。

关于AngularJS - 指令与 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18757679/

相关文章:

javascript - 范围包含值,但访问它时,它是未定义的

c# - .NET MVC 最佳实践,以防止 Controller 变得非常不可读

angularjs - 无法运行tomcat7

javascript - 如何使用指令动态更改模板?

javascript - ng 值无法正常工作

javascript - 如何将此代码集成到我的 AngularJS 应用程序中?

javascript - Grails - 从 Javascript 方法调用 Controller 和呈现模板

javascript - ngblur 并输入事件 : why on enter key two http calls go?

javascript - 使用自定义过滤器时 $digest() 被调用十次

javascript - 如何使用 Angular JS 获取 POST 请求的响应?