Angularjs - 使用新的范围或隔离范围:两种方法都有效,但其中一种是时髦的吗?

时间:2014-02-20 23:23:58

标签: angularjs

我编写了两个简单的日期选择器指令,这些指令从最终用户的透视功能完全相同。您可以在http://jsbin.com/rapey/2/edithttp://jsbin.com/vuq/1/edit查看它们的工作方式。第一个使用新范围的方式是这样编码的:

<div ng-controller='cntrl'>
   <br>
   Date in controller: {{date}}<br><br>
  <!-- <div date="date" datedirec ></div> -->
  <div date="date" datedirec ></div>
</div>

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

myMod.controller('cntrl', function ($scope) {
    $scope.date = '1/1/2000';
});

myMod.directive('datedirec', function () {
return {
restrict: 'A',
//scope:{date:'='},
scope:true,
template: "<div>Date: <input type='text' ng-model='date_value'/>" +
"<button ng-click='updateDate()'>Update Date</button> </div>",
controller: function($scope, $element){
  $scope.date_value=$scope.date;
  $scope.updateDate = function(){
    //$scope.date=angular.copy($scope.date_value);
    $scope.$parent.date = angular.copy($scope.date_value);
  };
}
};
});

第二种方法的编码方式与第一种方法完全相同。但是它不使用新范围,而是使用隔离范围。每个例子之间只有三条小线差异(见上面的评论)。

这是第一种方法(它将新范围与$ scope。$ parent结合使用):http://jsbin.com/rapey/2/edit

以下是第二种方法(它使用隔离范围):http://jsbin.com/vuq/1/edit

我的问题是,是否不应使用其中一种方法。

1 个答案:

答案 0 :(得分:3)

您应该尽可能使用隔离范围,因为这会创建松散耦合的组件。通过使用隔离范围,即使应用程序其他部分中的对象发生更改,也可以确保指令继续运行。使用子范围时(scope: true创建一个父范围的子范围),您假设父组件始终具有date。如果您碰巧尝试在没有date属性的组件中使用您的指令,或者date属性更改为currentDate,那么您的指令将失败。