有两种模式用于访问控制器函数:this和$scope。
我应该什么时候用哪种?我知道这是设置为控制器和$scope是视图作用域链中的对象。但是有了新的“Controller as Var”语法,你可以很容易地使用其中任何一种。所以我的问题是什么是最好的,未来的方向是什么?
例子:
使用这个
函数UserCtrl() {
这一点。Bye = function() {alert('....');};
}
<body ng-controller='UserCtrl as uCtrl'>
<按钮ng-click = ' uCtrl.bye() >再见> < /按钮
使用美元的范围
函数UserCtrl($scope) {
美元的范围。Bye = function () {alert('....');};
}
<身体ng-controller = ' UserCtrl ' >
<按钮ng-click = '再见()' >再见> < /按钮
我个人认为,与其他Javascript OO模式相比,this.name更容易理解,也更自然。
建议好吗?
我喜欢组合。
在用一些模拟数据填充它们之后,一个简单的console.log的$scope和'this'将显示这一点。
$scope允许访问控制器的隐藏部分,例如:
$$ChildScope: null;
$$childHead: null;
$$childTail: null;
$$listenerCount: Object;
$$listeners: Object;
$$nextSibling: Scope;
$$prevSibling: null;
$$watchers: null;
$$watcherCount: 0;
$id: 2;
$parent: Object;
foo: 'bar';
** Angular团队不建议使用$$的属性和方法,但是$可以安全地使用$parent和$id来做一些很酷的事情。
“this”直奔主题,附加2向绑定的数据和函数。你只会看到你附上的东西:
foo: 'bar';
那么为什么我更喜欢一种组合呢?
在ui-router嵌套的应用程序中,我可以访问主控制器,设置和调用子控制器中的通用值和函数:
在主控制器中:
// Main Controller
var mainCtrl = this;
mainCtrl.foo = 'Parent at the bar';
在子控制器中:
// Child Controller
var mainCtrl = $scope.$parent.mainCtrl;
var childCtrl = this;
// update the parent from within the child
childCtrl.underageDrinking = function(){
mainCtrl.foo = 'Child at the bar';
}
// And then attach the child back to a property on the parent controller!
mainCtrl.currentCtrl = childCtrl;
现在,您可以从子对象中访问父对象,从父对象中访问子对象!