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); }; });