注意事项

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保存通讯!

 

你可能感兴趣的:(注意事项)