我们何时使用$ scope,而不是使用它?没有它我似乎可以逃脱,至少就控制器定义而言(参见下面的例子)。
我对此是否正确?你能否提供一个例子,其中这个/ self不起作用,我们被迫使用$ scope?
// Method 1: Not using $scope
function LoginController() {
var self = this;
this.username = "";
this.password = "";
this.login = function() {
if( (self.username === 'admin') && (self.password === 'admin') ) {
// Do something
}
}
}
// Method 2: Using $scope
function LoginController($scope) {
$scope.username = "";
$scope.password = "";
$scope.login = function() {
if( ($scope.username === 'admin') && ($scope.password === 'admin') ) {
// Do something
}
}
}
答案 0 :(得分:4)
当前的Angular 2.0 Problem 2在不久的将来描述了一个没有$scope
的世界,强烈建议您遵循Angular migration path,后者建议使用controllerAs
语法在可能的情况下,为潜在的迁移做准备并遵守最佳实践。
也就是说,目前有一些情况, 使用$scope
。
$scope.$on
$scope.$broadcast
$scope.$emit
$scope.$watch
$scope.$apply
这些特殊情况都不适用于您的示例,因此您应该使用controllerAs
代替$scope
,I.E:
ng-controller="MyController as MyCtrl"
如果必须访问$scope
才能使用上述方法之一,您可以在使用controllerAs
语法时将其注入控制器:
function LoginController($scope) {
var self = this;
self.username = "";
self.password = "";
self.login = function() {
if( (self.username === 'admin') && (self.password === 'admin') ) {
// Do something
}
}
$scope.$on('event', function () {});
}
答案 1 :(得分:2)
方法#1被广泛认为是最佳实践。我尽量避免直接引用$ scope。
$ scope不在Angular 2.0中。通过避免引用它,您的最终迁移应该更容易。
John Papa的风格指南是最佳实践的绝佳参考:https://github.com/johnpapa/angular-styleguide
答案 2 :(得分:0)
可能在$ emit和$ broadcast的情况下,我们可能总是需要$ scope。
但是方法1是非常有用的复杂的父和子实现,以避免混淆,是的,hacks是由父和子为名称加前缀,但在父和子/ s实现中仍然非常有用。