ng-repeat 和 sql data
我们经常需要从sql拿一些table资料展现出来,一般是放在一个 js 的 arrayobject里 [{xx:1},{xx:2}];
angularjs 的ng-repeat 让我们轻松实现了模板同步
但有一点要切记,scope属于模板,arrayObject属于sql
所以我们绝对不可以因为模板需求而添加任何属性在 arrayObject上,我们只能添加在scope上
<div ng-repeat="obj in array" ng-init="age=0"> <!--如果这里换成 ng-init="obj.age=0" 就不应该了--> name : {{obj.name}} age : {{age}} <!--age 被加入到了这个row的scope--> <div ng-click="addAge()">addAge</div> </div>
$scope.addAge = function () {
this.age++; //这里的this指向当前的scope
}
我们可以通过事件调用到当前的scope读写age属性。
这里还要了解到,repeat指令会帮我们创建scope,续传parent scope .
如果我们在parent scope 的某个事件想修改某个row的一些view,我们应该使用 broadcast事件的方式。
因为repeat 是通过 array 做出来的,外部除了array和obj 没有任何接口可以让你和view做接触 .
所以只能使用 broadcast. 这也是我们为什么强调千万不要因为想改动view而宽展了obj 的属性。arrayobj是sql的,其它模板可能也要用的,不能因为这个模板而弄脏!
2个module 遇到同样的名字的service.
module1 有一个service 叫 abc
module2 也有一个service 叫 abc (撞名字)
当 module3 依赖注入 module1,module2
那么当module3调用 service abc 时,获取的是依赖注入排列最后一个的service,这里也就是module2的service abc!
依赖注入的限制
var extendAngular = angular.module("extendAngular", [], angular.noop); extendAngular.provider("$ajax", function () { //这里不能依赖注入$http哦 this.$get = ["$http", function ($http) { //这里就可以! return { name : "keatkeat" } }]; });
provider 中注入不了$http , 但是 $get factory的时候可以, 要注意初始化module的时候.config .provider 的时候有些东西是不能注入进去的!
指令
Multiple directives requesting isolated scope
. 多个指令在一个element内, 只能有一个 isolated scope , 一个 template , 一个 controller name .
ng-transclude 的scope会续传parent ,和你的指令是sibling的关系! 这是为了如果你的指令是隔离的,内部的transclude 还能和上一层的scope保存通讯!