angularjs – 角度范围变量和普通控制器变量

前端之家收集整理的这篇文章主要介绍了angularjs – 角度范围变量和普通控制器变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两组代码,如下所示

第一套代码

var app=angular.module('demo',[]);
app.controller('mainController',function(){
     this.myVar='hai';
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<html ng-app="demo">
<div ng-controller="mainController as mainControl">
  <p>{{mainControl.myVar}}</p>
</div>
</html>

第二套代码

var app = angular.module('demo',['$scope',function($scope) {
    $scope.myVar = 'hai';
  }
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-app="demo">
<div ng-controller="mainController">
  <p>{{myVar}}</p>
</div>

</html>

我想知道这两种向视图声明模型的方式之间的区别.有人可以解释一下.我是Angular JS的新手

> controllerAs视图语法:使用带有$scope语法的经典控制器上的controllerAs语法.

为什么?:控制器被构造,“新建”并提供单个新实例,并且controllerAs语法比经典$scope语法更接近JavaScript构造函数的语法.

为什么?:它促进了对视图中“点”对象的绑定的使用(例如customer.name而不是name),这更加符合上下文,更易于阅读,并且避免了在没有“点”的情况下可能出现的任何引用问题.

为什么?:有助于避免在具有嵌套控制器的视图中使用$parent调用.

<!-- avoid -->
<div ng-controller="Customer">
  {{ name }}
</div>

<!-- recommended -->
<div ng-controller="Customer as customer">
  {{ customer.name }}
</div>

> controllerAs控制器语法:使用带有$scope语法的经典控制器上的controllerAs语法.

controllerAs语法使用这个绑定到$scope的内部控制器

为什么?:控制器是超过美元范围的语法糖.您仍然可以绑定到View并仍然访问$scope方法.

为什么?:有助于避免在控制器中使用$scope方法的诱惑,否则可能更好地避免它们或将它们移动到工厂.考虑在工厂中使用$scope,或者在需要时在控制器中使用.例如,使用$emit,$broadcast或$on发布和订阅事件时,请考虑将这些用途移至工厂并从控制器调用.

/* avoid */
function Customer ($scope) {
  $scope.name = {};
  $scope.sendMessage = function () { };
}
/* recommended - but see next section */
function Customer () {
  this.name = {};
  this.sendMessage = function () { };
}

> controllerAs with vm:在使用controllerAs语法时使用捕获变量.选择一致的变量名称,例如vm,它代表viewmodel.

为什么?:this关键字是上下文的,当在控制器内的函数内使用时,可能会改变其上下文.捕获这种情况可以避免遇到这个问题.

/* avoid */
function Customer () {
  this.name = {};
  this.sendMessage = function () { };
}
/* recommended */
function Customer () {
  var vm = this;
  vm.name = {};
  vm.sendMessage = function () { };
}

注意:您可以通过将注释置于代码行上方来避免任何jshint警告.
/ * jshint validthis:true /
var vm = this;
注意:使用控制器创建控制器中的监视时,可以观看虚拟机.使用以下语法的成员. (小心创建手表,因为它们会为摘要周期增加更多负载.)

$scope.$watch('vm.title',function(current,original) {
    $log.info('vm.title was %s',original);
    $log.info('vm.title is now %s',current);
});

https://github.com/johnpapa/angularjs-styleguide#controllers

原文链接:https://www.f2er.com/angularjs/240495.html

猜你在找的Angularjs相关文章