首先,我是Angular的新手(而不是JS专家),但我必须得到一些工作,并且正在努力提交表单。我需要做的是从http API加载一些电影放映时间并使用ng-repeat将它们填充到页面上的某个容器中。 REST API将zipcode作为输入。我最初用固定的拉链(11111)加载它,这是有效的。 HTML中的变量似乎正确绑定到控制器中的变量,因为REST调用导致页面加载为空,然后电影在REST调用完成后大约出现一秒左右。现在我想让用户在文本字段中输入一个新ZIP,单击一个按钮,然后我想重新填充电影[],这样页面就会重新加载该div。
我的Angular应用程序看起来像这样
var app = angular.module('showtime', []);
app.controller('showtimeController', function($scope, $http) {
var foo = this;
var zip = 11111;
var movies = [];
$http.get('https://some.server/movies?location=' + zip).then(function(response) {
foo.movies = response.data;
});
});
我有一个HTML页面,其中包含一个显示一些电影详细信息的div,如下所示
<!DOCTYPE html>
<html ng-app="showtime">
<head>
<title>Showtime</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/javascript" src="js/app.js"></script>
</head>
<body data-spy="scroll" data-target=".navbar" data-offset="50" ng-controller="showtimeController as showtime">
...使用HTML表单...
<div class="col-xs-1" style="padding-top: 8px;">
<!--<label for="zipusr">Zip:</label>-->
<form name="zipForm" ng-submit="showtime.submitZip()" novalidate>
<a ng-href='#here' ng-click='refreshWithZip()'>go</a>
<input placeholder="Enter ZIP" type="text" class="form-control" id="zip" ng-model="zip">
</form>
</div>
<div class="col-xs-1" style="padding-top: 8px;">
<button class="btn btn-default btn-sm" type="submit">fetch</button>
</div>
...和一些div来迭代电影[] ......
<div id="section1" class="container-fluid">
<h1>Movies</h1>
<div class="row">
<div class="col-sm-6 col-md-4" ng-repeat="biz in showtime.movies.businesses">
<div class="thumbnail">
<img class="img-responsive" ng-src="{{biz.image_url}}" alt="..." width="120" height="120" />
<div class="caption">
<h3>{{biz.name}}</h3>
<p>{{biz.description}}</p>
</div>
</div>
</div>
</div>
</div>
任何帮助都将不胜感激。
答案 0 :(得分:1)
将ng-model
添加到绑定变量..
<input placeholder="Enter ZIP" type="text" class="form-control" ng-model="zipcode" id="zip" ng-model="zip">
现在在控制器中..制作一个功能
$scope.loadNewData = function(){
$http.get('https://some.server/movies?location=' + $scope.zipcode).then(function(response) {
foo.movies = response.data;
});
};
并在提交
上调用loadNewData()
函数
<button class="btn btn-default btn-sm" type="button" ng-click="loadNewData()">fetch</button>
答案 1 :(得分:0)
我在控制器定义中没有看到你的ng-submit调用的函数submitZip()。
我认为你应该这样修改你的控制器:
foo.submitZip = function(){
$http.get('https://some.server/movies?location=' + zip).then(function(response) {
foo.movies = response.data;
})
}
如果你想在控制器实例化时保持默认zip的负载,请在控制器声明的末尾添加一个foo.submitZip()。
希望这会对你有所帮助。