最近在用angularjs做一些东西,由于学艺不精,对angularjs了解不够,导致经常会不小心掉进一些自己挖的坑里(⊙_⊙),在这里记下来,谨防又踩。

1、angularjs ng-show not working

在页面中用到了pagination 分页插件

<pagination total-items="bigTotalItems" page="bigCurrentPage" max-size="maxSize" class="pagination-small" boundary-links="true"></pagination> 

。就想说总的条目数bigTotalItems为0的时候就不显示插件了,ng-show="!!bigTotalItems"。结果ng-show怎么都不起作用。但是如果直接写ng-show="!!0" 、ng-show="!!80"又是有效的。。。。

然后我又想换一种写法,在controller里面写个方法。

$scope.isShow = function{
return !!$scope.bigTotalItems;
};
<pagination ng-show="isShow()" total-items="bigTotalItems" page="bigCurrentPage" max-size="maxSize" class="pagination-small" boundary-links="true"></pagination>

还是没效果,这个时候有点明白了,是scope的问题。于是换一种写法再试一下:

<div ng-show="!!bigTotalItems">
<pagination total-items="bigTotalItems" page="bigCurrentPage" max-size="maxSize" class="pagination-small" boundary-links="true"></pagination>
</div>

果然这个时候就可以了。

pagination指令编写的时候

.directive('pagination', ['$parse', 'paginationConfig', function($parse, config) {
return {
restrict: 'EA',
scope: {
page: '=',
totalItems: '=',
onSelectPage:' &'
},
controller: 'PaginationController',
......

scope的设置为 {},, 这时 directive 创建一个独立的 scope,没有原型继承,directive 不会不小心读写父 scope。

所以当我把ng-show="!!bigTotalItems"写在指令pagination里的时候,pagination已经拥有了一个独立的scope,是无法读到父scope里面的bigTotalItems的了。

关于angularjs的scope,这里有篇文章写得很详细深入理解 AngularJS 的 Scope

2、scope.$apply

遇到了一个数据双向绑定失效的问题,就是明明在controller里面给$scope.×××赋值了,在页面上愣是没有update数据。

一开始还不知道是啥原因,然后上网找解决办法的时候看到说在后面加一句$scope.$apply()就行了,试了一下真的可以,这才发现有$scope.$apply()这个东西。

但是为什么加了$scope.$apply()就可以了?什么时候要用到$scope.$apply()?

上网搜了一下看到这篇文章,解决了我的疑问AngularJS and scope.$apply

$scope.$apply的作用的用来手动通知页面update绑定的数据的。

一般情况下是不需要我们手动添加这一句代码的,因为angularjs本身在需要的时候调用,以达到我们所看到的数据双向绑定的效果。

但是因为我用了一个外部插件uploadify,然后在回调函数那里更新我controller的数据$scope.hasUpload = !$scope.hasUpload.....

因为外部插件本身已经脱离了angularjs的作用域,所以数据双向绑定在这里没有效果,只能手动添加$scope.$apply()来通知页面update数据。

AngularJS and scope.$apply 这篇文章讲的要详细,专业好多,可以帮助我们理解到scope.$apply,还有angularjs数据双向绑定的原理。。。

3、js按需加载

之前做应用的时候都会在首页就把全站的js预先加载进来。。。

怎么实现按需加载,在德问上看到一个方案用AngularJS构建单页应用,怎样根据需求加载JS文件?

搬到这里来:

首先在$routeProvider里面加resolve属性,

$routeProvider.
when('/phones', {
templateUrl: 'partials/phone-list.html',
controller: PhoneListCtrl,
resolve: PhoneListCtrl.resolve})

然后

function PhoneListCtrl($scope) {
//本身不用管,该怎么弄怎么弄
} PhoneListCtrl.resolve = {
delay: function($q) {
var delay = $q.defer(),
load = function(){
$.getScript('/js/xxxxx.js',function(){
delay.resolve();
});
};
load();
return delay.promise;
}
}

 

用angularjs遇到的坑们的更多相关文章

  1. angularJS遇到的坑

    最近在用angularjs做一些东西,由于学艺不精,对angularjs了解不够,导致经常会不小心掉进一些自己挖的坑里(⊙_⊙),在这里记下来,谨防又踩. 1.angularjs ng-show no ...

  2. windows下Meteor+AngularJS开发的坑

    有复杂的地方我再开贴记录,这里只记录容易解决的坑. 1. windows下手工增加smart package.直接将下载下来的包扔到meteor package中.记得将文件夹名字改得和smart.j ...

  3. angularjs的一些坑关于 $sec

    今天遇到$sec的问题 app.filter('to_trusted', ['$sce', function ($sce) { return function (text) { return $sce ...

  4. AngularJS 的一些坑

    UI的闪烁 Angular的自动数据绑定功能是亮点,然而,他的另一面是:在Angular初始化之前,页面中可能会给用户呈现出没有解析的表达式.当DOM准备就绪,Angular计算并替换相应的值.这样就 ...

  5. angularjs select一些坑

    用select下拉框时,很容易出现第一个默认选择框是空白的情况. 就像这样: 平常我们可以在options中设置selected属性达到默认选择的目的. 同样的,我们可以在控制器中写入select的初 ...

  6. angularjs中的坑

    ng-show 等ng的指令中不需要使用{{parameter}}来取值,回无效

  7. vue.js源码精析

    MVVM大比拼之vue.js源码精析 VUE 源码分析 简介 Vue 是 MVVM 框架中的新贵,如果我没记错的话作者应该毕业不久,现在在google.vue 如作者自己所说,在api设计上受到了很多 ...

  8. select ng-change 方法中 拿不到 ng-modal 定义的变量值

    在使用angularjs框架的项目中,select 的数据源有两种绑定方式,在option中使用ng-repeat循环绑定,或者在select中使用ng-option 绑定. 无论哪种绑定方式,均要使 ...

  9. 那些年,在AngularJS的路上遇到的坑

    使用AngularJS这么久以来,遇到过一些坑,之前一直没有以书面的形式整理下,现在好好总结下,以供后面查备. 一.angular scope 在ng-if与ng-show下的区别(两者作用域的差别) ...

随机推荐

  1. MCS-51单片机的指令时序

    时序是用定时单位来描述的,MCS-51的时序单位有四个,它们分别是节拍.状态.机器周期和指令周期,接下来我们分别加以说明. 节拍与状态:    我们把振荡脉冲的周期定义为节拍(为方便描述,用P表示), ...

  2. HDU_1230——火星A+B,加法进制问题

    Problem Description 读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数.例如:地球上的10进制数2,在火星上 ...

  3. POJ2761---Feed the dogs (Treap求区间第k大)

    题意 就是求区间第k大,区间 不互相包含. 尝试用treap解决一下 第k大的问题. #include <set> #include <map> #include <cm ...

  4. Havel定理

    先贴一个百度百科的注释 Havel定理编辑 本词条缺少概述.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 中文名 Havel定理 外文名 Canisters theorem 特    ...

  5. A - Network of Schools - poj 1236(求连通分量)

    题意:学校有一些单向网络,现在需要传一些文件,1,求最少需要向几个学校分发文件才能让每个学校都收到,2,需要添加几条网络才能在任意一个学校分发都可以传遍所有学校. 分析:首先应该求出来连通分量,进行缩 ...

  6. MongoDB的数据类型

    最近在写一个lua的MongoDB模块.MongoDB版本3.2,lua则是5.3.1.底层以C++来写,再把函数暴露给lua调用.但是在lua中打印结果时,发现了些奇怪的现象.首先,数据库中的内容: ...

  7. windows使用命令行杀进程

    在windows有时使用任务管理器杀进程,一直杀不掉: 这个时候,可以使用命令行: 先使用tasklist 命令查看当前系统中的进程列表,然后针对你要杀的进程使用taskkill命令 如要杀nginx ...

  8. oracle触发器实例

    8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INS ...

  9. [ES6] Rest Parameter

    Problem with the ES5: function displayTags(){ for (let i in arguments) { let tag = arguments[i]; _ad ...

  10. php中定界符<<<的用法

    定界符给字符串定界的方法使用定界符语法(“<<<”).应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串. 结束标识符必须从行的第一列开 ...