Javascript 这与angular.js中的$scope相比?
我正在用angular开发一个rails应用程序,在过去,我一直使用$scope访问angular控制器的变量和方法。 在codeschool观看了Shaping up with Angular.js课程后,我意识到使用this和控制器别名是访问它们的更好方法 无论如何,我的应用程序在$scope下运行良好,但当我更改为“此”实现时,实验室变量变为空 我在这里给出一些代码: html:Javascript 这与angular.js中的$scope相比?,javascript,ruby-on-rails,angularjs,Javascript,Ruby On Rails,Angularjs,我正在用angular开发一个rails应用程序,在过去,我一直使用$scope访问angular控制器的变量和方法。 在codeschool观看了Shaping up with Angular.js课程后,我意识到使用this和控制器别名是访问它们的更好方法 无论如何,我的应用程序在$scope下运行良好,但当我更改为“此”实现时,实验室变量变为空 我在这里给出一些代码: html: 有什么想法吗?您在一个闭包内为这个实验室分配了一个值。记住,它的作用域与外部作用域是分开的此适用于完全不同的内
有什么想法吗?您在一个闭包内为这个实验室分配了一个值。记住,它的作用域与外部作用域是分开的<代码>此适用于完全不同的内容。这就是为什么使用
$scope
更可靠(而且可读性更好,如果你问我个人的意见的话)。您可能希望将闭包绑定到此
值:
(function() {
var app = angular.module('guiaV', []);
app.controller('LaboratorioController', function( $http) {
this.laboratorios = [];
$http.get('./laboratorios.json').success(function(data) {
return this.laboratorios = data;
}.bind(this));
});
})();
或者,您可以使用两个作用域中都可用的变量:
(function() {
var app = angular.module('guiaV', []);
app.controller('LaboratorioController', function( $http) {
this.laboratorios = [];
var foo = this;
$http.get('./laboratorios.json').success(function(data) {
return foo.laboratorios = data;
});
});
})();
您放入
angular.controller
的函数用作构造函数。不返回任何内容的JavaScript构造函数隐式返回this
。如果构造函数返回另一个对象,那么这个对象应该是新对象。e、 g:
function Class1() {
this.prop = 'xxx';
}
var obj1 = new Class1();
console.log(obj1.prop); // prints 'xxx'
function Class2() {
this.prop = 'xxx';
return {
hooray: 'yyy'
};
}
var obj2 = new Class2();
console.log(obj2.prop); // prints undefined
console.log(obj2.hooray); // prints 'yyy'
您的控制器返回http承诺(返回值为$http.get(…).success(…)
),因此angular相信这(http承诺)是您的实际控制器(它分配给$scope.labCtrl
)
没时间测试,希望我做对了
小小的例子@Blackhole我已经看到了这个答案,对我没有帮助……所以这里有一个好提示:使用
$scope
。真的。有一个和我一样的问题“标题”“我不认为它一定是复制品。。。快速审阅者还应阅读内容。。在控制器中,这不是$scope
@Blackhole,你没有帮助它。真的吗?尼尔斯克什么不清楚此
不是$scope
,链接中提供了详细的解释。您决定对我的答案进行否决,在评论中吹毛求疵,并大肆宣扬答案是重复的,而不是仅仅指出完整的答案。我决定尽我所能帮助。Blackhole我们是stackoverflow的一部分,以帮助其他开发人员,如果您不想,请删除您的帐户。谢谢@mingos,这是一个开发者社区所期待的态度。
(function() {
var app = angular.module('guiaV', []);
app.controller('LaboratorioController', function( $http) {
this.laboratorios = [];
var foo = this;
$http.get('./laboratorios.json').success(function(data) {
return foo.laboratorios = data;
});
});
})();
function Class1() {
this.prop = 'xxx';
}
var obj1 = new Class1();
console.log(obj1.prop); // prints 'xxx'
function Class2() {
this.prop = 'xxx';
return {
hooray: 'yyy'
};
}
var obj2 = new Class2();
console.log(obj2.prop); // prints undefined
console.log(obj2.hooray); // prints 'yyy'