为什么这个ng模型变量不起作用



所以我试图在Angular中创建一个程序来显示列车时刻表。这是我的问题,为什么;第一TT";变量破坏程序?

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<body>
<div ng-app = "myApp" ng-controller = "myCtrl">
<table>
<tr><th>Train Name</th><th>Destination</th><th>Frequency</th><th>Minutes Away</th><th>Next Arrival</th><th></th></tr>
<tr ng-repeat="x in trainArray">
<td>{{ x.name }}</td>
<td>{{ x.dest }}</td>
<td>{{ x.freq }}</td>
<td></td>
<td></td>
<td>X</td>
</tr>
</table>
{{dayMinutes}}
<form>
Train Name: <input type = "text"  ng-model = "name"/> 
<br>
<br>
Destination: <input type = text" ng-model = "dest"/>
<br>
<br>
First Train Time: <input type="text" placeholder = "(ex. 08:45 for 8:45pm)" ng-model = "firstTT">
<br>
<br>
Frequency (Minutes): <input type="text" style = "width: 50px;" ng-model = "freq">
<br>
<br>
<input type = "submit" value = "submit" id = "submit" data-toggle = "tool-tip" title = "add train">
</form>
</div>
<script>
var dayMillis = moment().diff(moment().startOf('day'));

//minutes since start of day
var dayMinutes = dayMillis/60000;
//why the hell does it say this is "not defined" and break the program?
// console.log(firstTT);
//regardless, I need to get the diff between this and the start of the day.
//that should look something like this:
// var startMinutes = moment(firstTT, "hh:mm").diff(moment().startOf('day'));

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope){
$scope.firstTT = "";
$scope.dayMinutes = dayMinutes;
$scope.trainArray = [
{
name: "Thomas",
dest: "New York",
first: "05:00",
freq: 30
},
{
name: "Duncan",
dest: "Boston",
first: "06:00",
freq: 45
}]
})
</script>
</body>
</html>

它声称变量是未定义的,这导致所有AngularJS停止运行。我试着把";init";以及"$"范围";,但那没用。怎么回事?

变量firstTT确实是未定义的,您从未声明过它。似乎您希望firstTT是您声明ng-model="firstTT"的输入字段的值。在angularjs中,模型视图控制器的模型部分是$scope,这意味着ng-model="firstTT"绑定到只能在控制器实现中访问的$scope.firstTT

我的猜测是,当输入字段中的值发生变化时,您需要计算startMinutes,要做到这一点,您需要做几件事。

首先实现一个可以在输入值更改时调用的方法,必须在$scope上执行此操作,以便在视图中绑定该方法。

$scope.onFirstTrainTimeChange = function() {
var startMinutes = moment($scope.firstTT, "hh:mm").diff(moment().startOf('day'));
};

然后在输入字段上使用ng-change指令,以便在输入更改时调用上面的方法。

<input ... ng-model="firstTT" ng-change="onFirstTrainTimeChange()">

您可能还想做其他事情,比如在输入格式不正确时处理错误,并使用ng-model-options指令来控制模型何时更新(例如debounce),以便在用户停止更改输入字段之前不会调用该方法。

最新更新