Angular JS和Javascript的一些问题
我是Javascript和Angular JS编程的新手,我正在尝试使用Yahoo Finance API制作一个货币转换器,但我还想直接在脚本中输入初始值,而无需单击按钮或按enter键,因此我认为使用Angular JS将非常棒。但它不能正常工作,我认为问题可能出在Angular JS和Javascript的一些问题,javascript,angularjs,Javascript,Angularjs,我是Javascript和Angular JS编程的新手,我正在尝试使用Yahoo Finance API制作一个货币转换器,但我还想直接在脚本中输入初始值,而无需单击按钮或按enter键,因此我认为使用Angular JS将非常棒。但它不能正常工作,我认为问题可能出在函数计算($scope)中。拜托,你能帮我吗 <html ng-app> <head> <script src="http://code.jquery.com/jquery-latest.js"&
函数计算($scope)
中。拜托,你能帮我吗
<html ng-app>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function httpGet(theUrl)
{
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", theUrl, false );
xmlHttp.send( null );
return xmlHttp.responseText;
}
function currencyConverter(currency_from,currency_to,currency_input){
var yql_base_url = "https://query.yahooapis.com/v1/public/yql";
var yql_query = 'select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20("'+currency_from+currency_to+'")';
var yql_query_url = yql_base_url + "?q=" + yql_query + "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
var http_response = httpGet(yql_query_url);
var http_response_json = JSON.parse(http_response);
return http_response_json.query.results.rate.Rate;
}
//The problem starts here?
function calculate($scope)
{
$scope.total= function(){
var currency_from = "USD";
var currency_to = "INR";
var rate = currencyConverter(currency_from,currency_to,$scope.currency_input);
return rate;
};
}
</script>
<script src="js/angular.js"></script>
</head>
<body>
<div ng-controller="calculate">
<div style="float:left;">
<form>
<input type="text" ng-model="currency_input" value="0"/> =
</form>
</div>
<div style="float:left">
{{total()}}
</div>
</div>
<div style="clear: both;"></div>
</body>
</html>
函数httpGet(theUrl)
{
var xmlHttp=null;
xmlHttp=新的XMLHttpRequest();
open(“GET”,theUrl,false);
xmlHttp.send(空);
返回xmlHttp.responseText;
}
函数currencyConverter(货币从、货币到、货币输入){
var yql_base_url=”https://query.yahooapis.com/v1/public/yql";
var yql_query='从%20yahoo.finance.xchange%20中选择%20*%20,其中%20对%20在%20中(“+currency_from+currency_to+”);
var yql_query_url=yql_base_url+“?q=“+yql_query+”&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys”;
var http_response=httpGet(yql_query_url);
var http_response_json=json.parse(http_response);
返回http_response_json.query.results.rate.rate;
}
//问题从这里开始?
函数计算($scope)
{
$scope.total=函数(){
var币种从=“美元”;
var货币单位至=“印度卢比”;
var rate=currencyConverter(货币从,货币到,$scope.currency\u输入);
回报率;
};
}
=
{{total()}}
一个问题是,在实际声明角度库之前,您在脚本中引用了角度概念$scope
要更正此问题,请将angular library脚本标记向上移动到其他脚本标记的上方(但在jquery脚本标记的下方)。一个问题,应该首先更正并从那里开始,即在实际声明angular library之前,您在脚本中引用了angular概念
$scope
要更正此问题,请将angular library脚本标记向上移动到其他脚本标记上方(但在jquery脚本标记下方)。您应该查看服务() 有了它,你就可以创建一个服务,把所有与雅虎相关的功能放在一个地方,然后把它注入到你的指令/控制器中 例: 您可以将服务函数的返回作为$scope属性等。
我真的明白为什么在这种情况下应该使用内嵌javascript。您应该看看服务() 有了它,你就可以创建一个服务,把所有与雅虎相关的功能放在一个地方,然后把它注入到你的指令/控制器中 例: 您可以将服务函数的返回作为$scope属性等。
我真的明白为什么在这种情况下应该使用内嵌javascript。使用AngularJS的代码中有一些错误。您忘记启动应用程序模块并添加控制器 我做了一些更正并进行了测试,它正在工作:
<html ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script>
</head>
<body>
<div ng-controller="MyController">
<div style="float:left;">
<form>
<input type="text" ng-model="currency_input" ng-change="total()" value="0"/> =
</form>
</div>
<div style="float:left">
{{ rate }}
</div>
</div>
<div style="clear: both;"></div>
<script>
angular.module('app', [])
.controller('MyController', function($scope, $http) {
function currencyConverter(currency_from,currency_to) {
var yql_base_url = "https://query.yahooapis.com/v1/public/yql";
var yql_query = 'select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20("'+currency_from+currency_to+'")';
var yql_query_url = yql_base_url + "?q=" + yql_query + "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
$http.get(yql_query_url).then(function(response) {
$scope.rate = $scope.currency_input*response.data.query.results.rate.Rate;
});
}
$scope.total = function() {
var currency_from = "USD";
var currency_to = "INR";
currencyConverter(currency_from, currency_to);
};
});
</script>
</body>
</html>
=
{{rate}}
角度.module('app',[])
.controller('MyController',函数($scope,$http){
功能currencyConverter(货币从,货币到){
var yql_base_url=”https://query.yahooapis.com/v1/public/yql";
var yql_query='从%20yahoo.finance.xchange%20中选择%20*%20,其中%20对%20在%20中(“+currency_from+currency_to+”);
var yql_query_url=yql_base_url+“?q=“+yql_query+”&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys”;
$http.get(yql\u query\u url).然后(函数(响应){
$scope.rate=$scope.currency\u input*response.data.query.results.rate.rate;
});
}
$scope.total=函数(){
var币种从=“美元”;
var货币单位至=“印度卢比”;
currencyConverter(货币从、货币到);
};
});
我不建议您使用jquery进行http调用。请改用$http!使用AngularJS的代码中存在一些错误。您忘记启动应用程序模块并添加控制器 我做了一些更正并进行了测试,它正在工作:
<html ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script>
</head>
<body>
<div ng-controller="MyController">
<div style="float:left;">
<form>
<input type="text" ng-model="currency_input" ng-change="total()" value="0"/> =
</form>
</div>
<div style="float:left">
{{ rate }}
</div>
</div>
<div style="clear: both;"></div>
<script>
angular.module('app', [])
.controller('MyController', function($scope, $http) {
function currencyConverter(currency_from,currency_to) {
var yql_base_url = "https://query.yahooapis.com/v1/public/yql";
var yql_query = 'select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20("'+currency_from+currency_to+'")';
var yql_query_url = yql_base_url + "?q=" + yql_query + "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
$http.get(yql_query_url).then(function(response) {
$scope.rate = $scope.currency_input*response.data.query.results.rate.Rate;
});
}
$scope.total = function() {
var currency_from = "USD";
var currency_to = "INR";
currencyConverter(currency_from, currency_to);
};
});
</script>
</body>
</html>
=
{{rate}}
角度.module('app',[])
.controller('MyController',函数($scope,$http){
功能currencyConverter(货币从,货币到){
var yql_base_url=”https://query.yahooapis.com/v1/public/yql";
var yql_query='从%20yahoo.finance.xchange%20中选择%20*%20,其中%20对%20在%20中(“+currency_from+currency_to+”);
var yql_query_url=yql_base_url+“?q=“+yql_query+”&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys”;
$http.get(yql\u query\u url).然后(函数(响应){
$scope.rate=$scope.currency\u input*response.data.query.results.rate.rate;
});
}
$scope.total=函数(){
var币种从=“美元”;
var货币单位至=“印度卢比”;
currencyConverter(货币从、货币到);
};
});
我不建议您使用jquery进行http调用。请改用$http!Angular使类似的操作比您正在尝试的要容易得多。例如,有一个$http服务用于执行GET,因此您可以省去jquery,而在我的示例中创建更简单的东西,如
ConverterService
由于您的输入绑定到范围变量,因此不需要设置value=“0”
,只需将$scope.currency\u input
设置为控制器中的默认值。我在scope上创建了一个convert
函数,它将在每次调用时更新输出。它在控制器底部调用一次,但可以绑定到y中的一个按钮