温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

angular1.x开发笔记

发布时间:2020-07-09 06:03:32 来源:网络 阅读:459 作者:csboyty 栏目:web开发

对于弹出层要使用独立地址比较复杂,比如说login是一个弹出层,但是又给它配了/login的地址,这种处理起来有些复杂

定义一个监听location改变的类,然后每次到了弹出层的地址就根据地址显示弹出层

services.service('LocationChanger', ['$location', '$route', '$rootScope',    
    function ($location, $route, $rootScope) {    
        this.rootScopeEvent=null;    
        //阻止ngView的刷新,返回this是方便链式调用    
        this.skipReload = function () {    
            var lastRoute = $route.current;    
            var me=this;    
            //这里绑定过后面会一直响应,关闭弹出层的时候要取消绑定,绑定的时候会返回取消绑定的函数    
            me.rootScopeEvent=$rootScope.$on('$locationChangeSuccess', function () {    
                $route.current = lastRoute;    
                //相应过后,立即取消绑定的事件    
                me.rootScopeEvent();    
            });    
            return me;    
        };    
        this.cancelReload=function(){    
            //取消$rootScope.$on('$locationChangeSuccess'的绑定    
            if(typeof this.rootScopeEvent ==="function"){    
                this.rootScopeEvent();    
            }    
            return this;    
        };    
        this.withReplace = function (url, doesReplace) {    
            if(doesReplace){    
                $location.path(url).replace();    
            }    
            else {    
                $location.path(url || '/');    
            }    
            return this;    
        };    
}]);    
LocationChanger.skipReload().withReplace();


ng-view只能有一个,用其插件ui-rotuer可以实现多个view

https://github.com/ui-router/angular


由于其内部采用全监听模式,每次改动一个model会更新所有的model,当model达到一定数量后,性能上有些吃力,有一些优化的建议

https://blog.51cto.com/13934921/2163063


对animate支持不友好,没有完善的回调模式,animate的性能也不尽人意,有时候需要人为的逻辑控制


在resource中默认会去掉结尾的“/”,使用下面这句代码加上对结尾“/”的支持

$resourceProvider.defaults.stripTrailingSlashes = false;



$http.post 和 $resource action post的区别


$http.post 使用 $http.post(url, postData, [config]);

params是在config中设置,例如$http.post("#",{"a":1},{params:{}});


resource action post中是

Resource.action([parameters], postData, [success], [error])

这个parameters是显示申明的,但是是可选参数,也就是说如果url中没有参数,是可以不带这个参数的,在action的定义的时候都可以不指定params属性

但是如果有params,这里有两种方式使用,一种params中的数据在postData中没有,那么使用的时候就要显示的带parameters这个参数,如果是postData中有,那么可以不带,直接用postData中的,只是params的定义的时候需要将值通过@符号进行映射

xxxx: {
    method: "post", url: xxxx
}
xxxx: {
    method: "post", url: xxxx,
    params: {formId: ""}
}
xxxx({formId:xxxxx}, formData).then(); //formData中没有formId这个参数
xxxx: {
    method: "post", url: xxxx,
    params: {formId: "@formId"}
}
xxxx(formData).then(); //formData有formId这个参数


select 对象 multiple的时候,使用track by会导致不能返现

$scope.tags = [{id:"xxx",title:"xxx"},{id:"ddd",title:"ddd"}];
$scope.selected = ["xxx"];
<select ng-options="item.item as item.title for item in tags track by item.id" name="multipleSelect" id="multipleSelect" ng-model="selected" multiple>
</select>

这样是不会显示选中的,需要把track by去掉



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI