javascript – 为什么将控制器声明为自身内部或使用$scope
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 为什么将控制器声明为自身内部或使用$scope,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1858字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 为什么将控制器声明为自身内部或使用$scope](/upload/InfoBanner/zyjiaocheng/725/8c2d6092161d4f30b36592b0123b8b5f.jpg)
我最近开始学习和使用AngularJS,我仍然不清楚某些概念.
我的问题是:在我的应用程序中,我有一个控制器,它使用$http一旦初始化就从我的后端检索数据.按照Angular上CodeSchool的优秀教程,我提出了这个:
app.controller("agentController", function ($http) {
var agentsCtrl = this;
agentsCtrl.agents = [];
$http.get("getAgents").success(function (data) {
agentsCtrl.agents = data;
});
...
HTML:
<div ng-controller="agentController as agentCtrl">
<div ng-repeat="agent in agentCtrl.agents">
...
这工作正常,但我不明白为什么我需要使用它将控制器声明为自身内部的变量.根据我的理解,因为通过这样做,我可以在$http服务中调用它,其中this关键字将返回错误的范围.它是否正确?
我发现这也有效:
app.controller("agentController", function ($http, $scope) {
$scope.agents = [];
$http.get("getAgents").success(function (data) {
$scope.agents = data;
});
HTML:
<div ng-controller="agentController as agentCtrl">
<div ng-repeat="agent in agents">
...
我想这是有效的,因为我明确地注入了范围并在服务中使用它.此外,HTML现在略有不同.在第一种情况下,我需要显式调用agentCtrl.agents,而范围只需调用代理.这仍然是因为变量现在在范围而不是控制器上声明?它是否正确?
在类似情况下使用的最佳做法是什么?
谢谢!
解决方法:
问题1:
您必须保存对范围var agentsCtrl = this的引用,因为您正在创建一个匿名函数以用作回调.当你这样做时,上下文变量(this)将是window.
app.controller("agentController", function ($http) {
// this == your controller
var agentsCtrl = this;
$http.get("getAgents").success(function (data) {
// Anonymous function
// this == Window Object
});
});
问题2:
$scope是应用程序控制器和视图之间的粘合剂.您可以将其作为全局变量引用,您可以从视图和控制器访问它.
$scope.agents = []; // From controller
和
{{ agents }} // From view (you don't need to specify the $scope variable)
我更喜欢为控制器提供别名,并在我的HTML中使用它
<div ng-controller="agentController as agentCtrl">
<div ng-repeat="agent in agents">
...
但两种方式都是正确的,并且可以正常工作.
内容总结
以上是互联网集市为您收集整理的javascript – 为什么将控制器声明为自身内部或使用$scope全部内容,希望文章能够帮你解决javascript – 为什么将控制器声明为自身内部或使用$scope所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。