AngularJS数据绑定的最佳实践

1. 由于JavaScript自身的特点,以及它在传递值和引用时的不同处理方式,通常认为,在视图中
通过对象的属性而非对象本身来进行引用绑定,是Angular中的最佳实践。

<script type="text/javascript">
var obj = {x : 1};
alert(obj) // [object Object]
alert(obj.x) // 1
function foo(o) {
    o = 100;
    alert(o);// 100
}
foo(obj);
alert(obj); // 仍然是 [object Object]
alert(obj.x); // 仍然是1, obj并未被修改为100.

var str = "abc";
alert(str[0]); // "a"
str[0] = "d";
alert(str[0]); // "a"
alert(str); // "abc"
str="dbc"
alert(str); // "dbc"
</script>

准确的说,JS中的基本类型按值传递,对象类型按共享传递的(call by sharing,也叫按对象传递、按对象共享传递)。

最早由Barbara Liskov. 在1974年的GLU语言中提出。该求值策略被用于Python、Java、Ruby、JS等多种语言。
 
该策略的重点是:调用函数传参时,函数接受对象实参引用的副本(既不是按值传递的对象副本,也不是按引用传递的隐式引用)。

它和按引用传递的不同在于:在共享传递中对函数形参的赋值,不会影响实参的值。如上面例子中,不可以通过修改形参o的值,来修改obj的值。

2. 将控制器命名为[Name]Controller而不是[Name]Ctrl是一个最佳实践。

3. 控制器应该尽可能保持短小精悍,而在控制器中进行DOM操作和数据操作则是一个不好的实践。

设计良好的应用会将复杂的逻辑放到指令和服务中。通过使用指令和服务,我们可以将控制器重构成一个轻量且更易维护的形式

angular.module('myApp', [])
  .controller('MyController', function($scope,UserSrv) {
  // 内容可以被指令控制
  $scope.onLogin = function(user) {
  UserSrv.runLogin(user);
  };
});
原文地址:https://www.cnblogs.com/sunspeedzy/p/6878394.html