同名服务

  在一次项目里,之前是同事写的。我有一次在异步获取服务器上的数据时,习惯把api地址写在一个服务Store里,但是程序总是返回Store.api.get()里的get is undefined。知道肯定是Store.api为空造成的原因;但是觉得应该是没有问题的才对,最后看到在页面里又重新定义了一次Store服务,所以造成了覆盖。

myApp.factory('Store',function(){
return{
name:'zhang',
age:25
}
})
myApp.factory('Store',function(){
return{
name:'dong',
age:27
}
})  //服务同名了,所以只有最后一次的Store服务有效

建议:在项目大的时候,将项目逻辑分成多个模块,在每个模块里写服务和逻辑。然后在注入到其他模块中,便于测试和逻辑清晰;

在查找错误上,使用先看看服务对象的输出

对象复制

  如果将一个对象赋值给其他对象,无论赋值多少次,最后被赋值的对象都来自同一个对象的引用。

var a={};
var b=a;
b.name='zhang';
a.name //"zhang"
var a={};
var b={};
a==b //false

在angularJS中,如果不想要引用的传递,但是又想获得对象里的数据。可以使用angular.copy(),使用forEach() 方法,把对象里的属性和值重新复制到一个新的对象上;但是又不等于被赋值的对象; var关键词的作用就是在内存中新开一块地址吧

ng-select

angularJS中的select不像HTML代码里自己手动添加option,毕竟使用了指令,扩展了select的功能。

select元素使用ng-options生成下拉选项,只需要提供一个数组给ng-options就好,如果需要提供默认值,需要给select的绑定模型变量赋值

使用ng-options的时候必须给select绑定模型变量ng-model,否则会出错误:[$compile:ctreq] http://errors.angularjs.org/1.5.2/$compile/ctreq?p0=ngModel&p1=ngOptions

<div ng-controller="myController">
<select ng-model="glass" ng-options="o.op as o.type for o in operation">
</select>
</myController>
<script>
myApp.controller('myController', function($scope){
$scope.operation=[
{type: '大于', op: '>'},
{type: '大于等于', op: '>='},
{type: '小于等于', op: '<='},
{type: '等于', op: '='},
{type: '小于', op: '<'},
{type: '不等于', op: '<>'},
{type: '包含', op: ',like'},
{type: '不包含', op: 'notlike'}
];
})
</script>

但是你查看源代码就会看到,angularJS自动在option的value属性里把value值前加了字段类型

<option label="大于等于" value="string:>=">大于等于</option>

也可以自己手动添加option

<select ng-model="glass">
<option value="1">one</option>
<option value="2">two</option>
</select>

Note:麻烦就是手动添加的option的value都是字符串,初始化的时候,$scope.glass="必须是引号引起来的字符串"; 但是ng-select就比较灵活了,使用ng-options就可以给value传基本类型(数字,字符串,布尔值)和对象类型,在初始化的时候赋对应类型的值,调用的时候也获取的是对应类型的数据;

<select ng-model="glass" ng-options="o.id as o.name for o in num" class="ng-pristine ng-valid ng-not-empty ng-touched">
<option value="?" selected="selected"></option>
<option label="one" value="boolean:true">one</option>
<option label="two" value="boolean:false">two</option>
</select>
<select ng-model="glass" ng-options="o.id as o.name for o in num" class="ng-pristine ng-untouched ng-valid ng-not-empty">
<option value="?" selected="selected"></option>
<option label="one" value="number:1">one</option>
<option label="two" value="number:2">two</option>
</select>

添加同一个对象

在表格中,为表格新建一行,并提供一个默认值属性字段

<tr ng-repeat="user in users">
...
</tr>

直接push一个对象到users就行了,如果在行中使用$index,但是push到users里的对象是同一个对象(同一个对象的引用)就会出错

Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys

可以根据官方的解决方案,使用ng-repeat="user in users track by $index";

												

angularJS实践过程中出现的问题总结的更多相关文章

  1. Spring Cloud Config 配置中心实践过程中,你需要了解这些细节!

    本文导读: Spring Cloud Config 基本概念 Spring Cloud Config 客户端加载流程 Spring Cloud Config 基于消息总线配置 Spring Cloud ...

  2. AngularJs使用过程中,在ng-repeat中使用track by

    1.问题描述: 点击删除后:table中的被选中设备确实被删除了,但是data-table并没有重新加载出来, 查看js代码: 先对$scope.data_table进行了destroy(),然后重新 ...

  3. Docker从零到实践过程中的坑

    欢迎指正: Centos7 下的ulimit在Docker中的坑 http://www.dockone.io/article/522 僵尸容器:Docker 中的孤儿进程 https://yq.ali ...

  4. SWT实践过程中遇到的问题

    1.import org.eclipse.swt.widgets.Text; 诸如右所示的找不到这个包. 解决办法:project->properties->build path-> ...

  5. Java 理论和实践: 了解泛型 识别和避免学习使用泛型过程中的陷阱

    Brian Goetz (brian@quiotix.com), 首席顾问, Quiotix 简介: JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进.但是,对于初次使用泛 ...

  6. python与机器学实践-何宇健 源代码及过程中遇到的问题

    # -*- coding: utf-8 -*-"""Spyder EditorThis is a temporary script file.""&q ...

  7. 在CMMI推广过程中EPG常犯的错误(转)

    本文转自: http://developer.51cto.com/art/200807/86953.htm 仅用于个人收藏,学习.如有转载,请联系原作者. ---------------------- ...

  8. 编译recovery及过程中的部分错误解决

    你必须使用32位或64位Ubuntu系统,关于如何建立编译环境和同步源码的指导,请自己查找有关指导的文章. 1, 安装所需要的包 2, 建立编译的环境,并同步CWM所需的源码,CyanogenMod源 ...

  9. ACM 做题过程中的一些小技巧。

    ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long l ...

随机推荐

  1. 解读ASP.NET 5 & MVC6系列(9):日志框架

    框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比. ...

  2. mongodb 速成笔记

    以下环境为mac osx + jdk 1.8 + mongodb v3.2.3 一.安装 brew安装方式是mac下最简单的方式 brew update brew install mongodb 其它 ...

  3. [LeetCode] Strobogrammatic Number 对称数

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...

  4. 【原】Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令

    <Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...

  5. python cookbook 学习系列(一) python中的装饰器

    简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...

  6. 【BZOJ 4582】【Usaco2016 Open】Diamond Collector

    http://www.lydsy.com/JudgeOnline/problem.php?id=4582 排好序后用两个指针直接\(O(n)\)扫,貌似这个东西学名"two pointers ...

  7. Rabin-Karp指纹字符串查找算法

    首先计算模式字符串的散列函数, 如果找到一个和模式字符串散列值相同的子字符串, 那么继续验证两者是否匹配. 这个过程等价于将模式保存在一个散列表中, 然后在文本中的所有子字符串查找. 但不需要为散列表 ...

  8. .技术参数图用pillow自动处理

    python 2.7 pillow 安装python2.7.10(自带pip),修改豆瓣源,下载pillow

  9. 【20161203-20161208】清华集训2016滚粗记&&酱油记&&游记

    先挖坑(这个blog怎么变成游记专用了--) 已更完 #include <cstdio> using namespace std; int main(){ puts("转载请注明 ...

  10. 事件DOMContentLoaded和load的区别

    1.当 onload 事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了. 2.当 DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,f ...