Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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
Angular JS和Javascript的一些问题_Javascript_Angularjs - Fatal编程技术网

Angular JS和Javascript的一些问题

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"&

我是Javascript和Angular JS编程的新手,我正在尝试使用Yahoo Finance API制作一个货币转换器,但我还想直接在脚本中输入初始值,而无需单击按钮或按enter键,因此我认为使用Angular 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"/> = &nbsp;
        </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"/> = &nbsp;
        </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"/> = &nbsp;
        </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中的一个按钮