为什么对象上的“.show”属性会搞砸基于该对象的数据绑定
Why does the `.show` property on an object screw up the databinding based on that object?
非常新手的问题在这里:
我正在编写一个片段,如果单击按钮,它可以显示和隐藏菜单。 在下面的代码中,与 menuState
变量的数据绑定不起作用,其中我有一个标记为菜单状态的 .show
属性。
<html ng-app>
<body>
<div ng-controller="DeathrayController">
<p>menuState: {{menuState.show}}</p>
<button ng-click="toggleMenu()">Toggle Menu</button>
<ul ng-show='menuState.show'>
<li >Stun</li>
<li >Disintegrate</li>
</ul>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>
<script>
function DeathrayController($scope){
$scope.menuState.show = false;
$scope.toggleMenu = function(){
$scope.menuState.show = !$scope.menuState.show;
};
}
</script>
但是,这个代码段,没有 menuState 变量上的 .show
属性就可以正常工作:
<html ng-app>
<body>
<div ng-controller="DeathrayController">
<p>menuState: {{menuState}}</p>
<button ng-click="toggleMenu()">Toggle Menu</button>
<ul ng-show='menuState'>
<li >Stun</li>
<li >Disintegrate</li>
</ul>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>
<script>
function DeathrayController($scope){
$scope.menuState = false;
$scope.toggleMenu = function(){
$scope.menuState = !$scope.menuState;
};
}
</script>
</body>
</html>
为什么 .show
属性会搞砸数据绑定?
更新:这是我从控制台收到的错误消息:
TypeError: Cannot set property 'show' of undefined
at new DeathrayController (file:///var/folders/61/3h5pq5d14sx9ry5mdgxt00480000gn/T/tmpyxin9v.htm:18:25)
at d (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:27:325)
at Object.instantiate (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:27:455)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:50:239
at https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:42:154
at m (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:6:312)
at k (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:42:16)
at e (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:38:198)
at e (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:38:215)
at e (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:38:215)
但是,为什么在没有show
属性的情况下定义menuState
呢?
问题是你不能声明这样的对象:
$scope.menuState.show = false;
由于之前没有定义$scope.menuState
,JavaScript 尝试访问 $scope.menuState
的属性show
并抛出错误,您需要将代码更改为:
$scope.menuState = {show : false}
;
相关文章:
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 如何使全局变量仅特定于该文件
- 点击复选框并显示“;“新闻”;仅适用于该类型的类别
- 是否可以创建一个对象,该对象是另一个对象的子集,而不会丢失javascript中的引用
- 将 JSDoc 与匿名对象和该对象的函数一起使用的正确方法
- 使用rxjs创建一个可观察的对象,该对象稍后将连接到web套接字
- JS 函数将对象作为输入,并返回一个对象,该对象对作为参数传递的对象执行操作
- AngularJS在第一个数组中查找对象,该对象未在第二个数组中呈现
- 如何仅相对于该框架而不是整个窗口执行javascript
- 在 Ember 中,如何设置一个特定的对象,该对象是控制器中数组的一部分
- 如何将函数中的 JQuery 对象作为该对象的方法调用的参数传递
- Parse.com正在查询包含指针数组的对象,该数组无法使用include
- 如何调用函数创建的对象,该对象现在位于数组中
- JavaScript获取对象数组的值或属性(如果对象具有该属性)
- 访问数组中的对象,该对象是另一个对象Javascript的属性
- 确定正在使用的浏览器,然后为依赖于该浏览器的类设置样式
- 在jQuery选择器数组中单击1项将应用于该数组中的所有元素
- 我需要在对象中设置json对象属性,然后从同一对象中的另一个对象引用该属性
- 尝试保存一个对象,该对象的指针指向一个新的未保存的对象
- CSS—根据字体大小选择元素,并动态地将样式应用于该文本