And*_*ndy 0 javascript angularjs
我知道这已被问了很多次,但我已经检查了其他几个问题和答案,我仍然没有接近解决我的问题.
index.html的:
<!doctype html>
<html lang="en" ng-app="GitUserSearch">
<head>
<meta charset="utf-8">
<title>Github user search</title>
<link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" href="bootstrap_css_overrides/bootstrap_overrides.css">
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="js/secrets.js"></script>
<script src="js/app.js"></script>
<script src="js/gitUserSearchController.js"></script>
</head>
<body ng-controller="GitUserSearchController as searchCtrl">
<div class="container">
<br>
<form class="form-horizontal">
<input type="text" ng-model="searchCtrl.searchTerm" ng-change="searchCtrl.doSearch()" ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }">
<button class="btn btn-primary" ng-click="searchCtrl.doSearch()">Search</button>
</form>
<br>
<ul class="list-group">
<li ng-repeat="user in searchCtrl.searchResult.items">
<img ng-src="{{user.avatar_url}}&s=50">
<a ng-href="{{user.html_url}}">{{user.login}}</a>
</li>
</ul>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
JS/secrets.js:
githubToken = "longGithubTokenThatICannotShareHerePublicly";
Run Code Online (Sandbox Code Playgroud)
secrets.js在.gitignore中.
JS/gitUserSearchController.js:
githubUserSearch.controller('GitUserSearchController', ['$resource', function($resource) {
var self = this;
var searchResource = $resource('https://api.github.com/search/users/');
var githubToken = githubToken;
self.doSearch = function() {
self.searchResult = searchResource.get(
{ q: self.searchTerm, access_token: githubToken }
);
};
}]);
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,我可以使用浏览器的检查工具看到,http请求是在没有githubToken字符串的情况下进行的.
当我将githubToken字符串硬编码到gitUserSearchController中时,不是试图让它使用假定的githubToken全局变量,而是使用GitHub令牌完美地完成http请求.
因此,如何设置文件以及如何声明和访问变量似乎是一个问题.
在这里回购.
当你这样做:
var githubToken = githubToken;
Run Code Online (Sandbox Code Playgroud)
您正在定义一个新的局部变量,它通过相同的名称"隐藏"全局变量.对于任何给定的符号名称,在搜索全局范围之前搜索本地范围,因此与全局同名的本地变量实际上"隐藏"全局.
另外,由于将varJavascript中的所有定义"提升" 到声明它们的函数作用域的顶部,因此上面的代码行实际上是这样处理的:
var githubToken;
githubToken = githubToken;
Run Code Online (Sandbox Code Playgroud)
所以,你可以进一步了解为什么它没有做你想做的事情.
将局部变量的名称更改为不同的或甚至不定义新变量,只需直接使用全局,因为无论如何似乎没有理由分配给局部变量.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |