无法在 JS 而不是 HTML 中初始化 ng-model
Cannot initialize ng-model in JS rather than HTML
HTML:
...
<input ng-init="item.check=false" type="checkbox" ng-model="item.check">
...
<input ng-init="item.name=''" class="form-control" ng-model="item.name">
...
JS:
var myApp = angular.module('myApp', []);
myApp.controller('AppCtrl', function ($scope, $http) {
var refresh = function() {
$scope.item.check = false;
$scope.item.name = "";
}
//Call upon loading app to initialize values, also called upon events to refresh the field
refresh();
我最初认为只有 JS 足以初始化这些值,所以我去掉了复选框和表单的 ng-init 然后最终得到错误:
TypeError: Cannot set property 'name' of undefined
如果我只保留两个 ng-init,应用程序就可以运行。当我仅从 2 个元素之一(因此从复选框或表单)中删除 ng-init 时,它也有效,但如果我同时删除这两个元素,它将不起作用。这里发生了什么?我这样做是否正确,或者是否有更好的初始化方法?
谢谢。
您可以在控制器的第一行添加 $scope.item = {}
。
Javascript 在 $scope.item
本身不存在(或在某些情况下不是对象)时尝试访问 $scope.item.name
时报告错误。
当您执行 ng-init
时,angular 会为您创建对象,因此您不会收到错误。
将此添加到控制器
$scope.item = {};
HTML:
...
<input ng-init="item.check=false" type="checkbox" ng-model="item.check">
...
<input ng-init="item.name=''" class="form-control" ng-model="item.name">
...
JS:
var myApp = angular.module('myApp', []);
myApp.controller('AppCtrl', function ($scope, $http) {
var refresh = function() {
$scope.item.check = false;
$scope.item.name = "";
}
//Call upon loading app to initialize values, also called upon events to refresh the field
refresh();
我最初认为只有 JS 足以初始化这些值,所以我去掉了复选框和表单的 ng-init 然后最终得到错误:
TypeError: Cannot set property 'name' of undefined
如果我只保留两个 ng-init,应用程序就可以运行。当我仅从 2 个元素之一(因此从复选框或表单)中删除 ng-init 时,它也有效,但如果我同时删除这两个元素,它将不起作用。这里发生了什么?我这样做是否正确,或者是否有更好的初始化方法?
谢谢。
您可以在控制器的第一行添加 $scope.item = {}
。
Javascript 在 $scope.item
本身不存在(或在某些情况下不是对象)时尝试访问 $scope.item.name
时报告错误。
当您执行 ng-init
时,angular 会为您创建对象,因此您不会收到错误。
将此添加到控制器
$scope.item = {};