AngularJS一个由于未声明对象而报的错

实现这样的一个需求:点击某个按钮,然后显示或隐藏某块区域。

先注册一个AngularJS的一个module:

var myApp = angular.module("myApp",[]);

为module注册controller:

myApp.controller("MyController",[‘$scope‘,function($scope){

    $scope.menuState.show = false;

    $scope.toggleMenu = function(){
        $scope.menuState.show = !$scope.menuState.show;
    };
}]);

以上,toggleMenu函数用来修改show字段的true或false,即toggle。

AugularJS为我们提供了一个ng-show,当为true就显示,反之不显示。

<div ng-controller="MyController">
    <button ng-click="toggleMenu()">Toggle Menu</button>
    <ul ng-show="menuState.show">
        <li>aa</li>
        <li>bb</li>
    </ul>
</div>

运行,报错: TypeError: Cannot set property ‘show‘ of undefined

原来,show作为menuState的一个字段,而menuState作为对象还没有声明。加上声明menuState对象的代码:

        myApp.controller("MyController",[‘$scope‘,function($scope){

            $scope.menuState={};

            $scope.menuState.show = false;

            $scope.toggleMenu = function(){
                $scope.menuState.show = !$scope.menuState.show;
            };
        }]);

完整如下:

<!doctype html>
<html ng-app="myApp">
<head>
    <meta charset="UTF-8">
    <title>Untitled Document</title>
    <script src="angular.min.js"></script>
    <script>
        var myApp = angular.module("myApp",[]);

        myApp.controller("MyController",[‘$scope‘,function($scope){

            $scope.menuState={};

            $scope.menuState.show = false;

            $scope.toggleMenu = function(){
                $scope.menuState.show = !$scope.menuState.show;
            };
        }]);
    </script>
</head>
<body>

    <div ng-controller="MyController">
        <button ng-click="toggleMenu()">Toggle Menu</button>
        <ul ng-show="menuState.show">
            <li>aa</li>
            <li>bb</li>
        </ul>
    </div>

</body>
</html>


总结:

● ng-show:是否显示元素
● 对象一定要先声明或初始化

时间: 2024-08-09 13:00:03

AngularJS一个由于未声明对象而报的错的相关文章

C# 一个数组未赋值引发的血案

在电脑前又是一天,后来脑子也糊里糊涂,可能是基础还不牢固,设置断点,找了找问题才发现数组定义出了问题, 我是这样定义数组的,string[] auths ; string auths=new string[]{} 等等 程序第一次报错,未实例化对象,什么情况这是,我以为是写遍历队列的问题,那个队列声明为全局了,后来值也能传给重新定义的测试string 变量,也没问题啊. 再后来才知道未实例化数组,数组也要实例化,以前觉得可以信手哪来就用,在c#上的托管堆上,没有实例化对象是没法用的.实例化数组

只声明对象也能调用方法但不起作用的原因分析

今天犯二了,搞一个locationManager一直不起作用,在加上权限声明后didupdatelocation这个必定会执行的方法还是没执行,用网上的代码粘贴就能用,我是百思不得其解. 后来终于发现问题根源:我只用@property声明,viewDidLoad方法里面没有实例化 在追悔自己2的时候,还纳闷系统为什么不报错呢? 网上没找到答案,自己猜测: 对象的声明:只是在栈上开辟了一个(固定大小?)空间(即指针地址)(2.对象的声明和基本变量都是放在栈上的) 初始化时:会在堆内存分配该对象所需

MFC 错误异常,用vs添加资源并为资源定义类后报错:error C2065 : 未声明的标识符

添加了一个Dialog资源,修改了ID之后右击资源添加了一个类,在类里面有一个成员变量: // 对话框数据    enum { IDD = IDD_GETIN }; 而在编译过程中出现报错,错误代号是error C2065 : 未声明的标识符,我的第一反应是为什么我没通过手动添加资源而是通过VS添加都会出现这种情况呢,我想应该是其它地方错误导致此报错吧,但是却没想过,此类错误往往是因为没有包含某个头文件而引起的. 最后我是这样解决的:添加了一个#include"Resource.h"

利用try-catch判断变量是已声明未声明还是未赋值

原文 利用try-catch判断变量是已声明未声明还是未赋值 这篇文章主要介绍了利用try-catch判断变量是已声明未赋值还是未声明,需要的朋友可以参考下 目的是如果一个变量是已声明未赋值,就可以直接赋值:并且不能改变变量的作用域 如果未声明的话,就重新声明, 在网上搜了下,常见的方法是if(typeof(a)=='undefined'){var a='ss';}, 但是这种方法对未声明或已声明未赋值的变量都会返回true.而且如果是这样: 代码如下: var a; function f(){

error C2065:未声明的标识符错误

原文地址:http://blog.sina.com.cn/s/blog_8216ada701017evx.html 在VS2010下进行VC++调试时,出现这样一种错误:error C2065:未声明的标识符,当时感觉十分怪异,为什么说怪异呢?因为如果在.cpp中未引入相关.h文件出现这样的错误很正常,但是现在是已经引入了相关的头文件,却还是出现了诸如error C2065.error C2087.error C2133...的错误. 情况是这样的,新建了一个工程项目,想使用其他工程中定义的同一

jsWindow 对象 Window 对象 Window 对象表示浏览器中打开的窗口。 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。 注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。 Window 对象集合 集合 描述 frames[] 返回窗口中所有命

一.JSX简介 JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析. 如下(JS写法) var child1 = React.createElement('li', null, 'First Text Content'); var child2 = React.createElement('li', null, 'Second Text Content'); var

找不到标识符、未声明的标识符

1.error C3861: "_T": 找不到标识符 #include <tchar.h> 2.error C3861: "time": 找不到标识符 查看代码,发现已经包含了 time.h 头文件,不应该报这个错误啊. 找了半天,发现项目文件中有一个叫 Time.h 的头文件,可能是和vs自带的time.h冲突了. 将该 Time.h 头文件改名为 MyTime.h 之后,再把原来引用 Time.h 的地方 替换成 MyTime.h 就好了. 3.&

“未声明的标识符:SurfFeatureDetector”问题解决办法

在VS中使用opencv2.4.X版本的时候,如果使用SurfFeatureDetector(或者SiftFeatureDetector)做特征点检测的时候,按照官方文档上的示例代码include头文件为:opencv2/features2d/features2d.hpp,则会出现如下报错:errorC2065: "SurfFeatureDetector": 未声明的标识符. 1.实际上2.4.X版本的SurfFeatureDetector(或者SiftFeatureDetector)

[JCIP笔记] (三)如何设计一个线程安全的对象

在当我们谈论线程安全时,我们在谈论什么中,我们讨论了怎样通过Java的synchronize机制去避免几个线程同时访问一个变量时发生问题.忧国忧民的Brian Goetz大神在多年的开发过程中,也悟到了人性的懒惰,他深知许多程序员不会在设计阶段就考虑到线程安全,只是假设自己的代码能按照自己的想法很好地运转.然而当程序上线.线程安全问题真的发生时,要花费多于前期设计数倍的时间和精力去进行排查.解决,甚至重新设计.于是,他在字里行间一直秉持一种"凡事皆可发生"的小心翼翼的哲学,并以这种哲学