Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这与angular.js中的$scope相比?_Javascript_Ruby On Rails_Angularjs - Fatal编程技术网

Javascript 这与angular.js中的$scope相比?

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: 有什么想法吗?您在一个闭包内为这个实验室分配了一个值。记住,它的作用域与外部作用域是分开的此适用于完全不同的内

我正在用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'