【问题标题】:AngularJS-Coding of how to get the inner ng ​​declaration? [closed]AngularJS-Coding之如何获取内层ng声明? [关闭]
【发布时间】:2014-06-16 05:04:35
【问题描述】:

我有以下代码:

(function(ng,app){
'use strict';
//SERVICE NÀY CUNG CẤP THÔNG TIN VỀ ROUTE REQUEST HIỆN HÀNH
app.service("requestContext",
function (RenderContext) {
    // ---------------------------------------------- //
    // ---------------------------------------------- //
    // Lưu trữ action path hiện hành
    var action = "";
    // Lưu trữ các action như là một mảng gồm các phần tử vì vậy chúng ta 
    //có thể dễ dàng kiểm tra các các phần tử của mảng này khi cần
    var sections = [];
    // Lưu trữ các đối tượng route param hiện hành
    var params = {};
    // Lưu trữ các action trước đó và các route param, chúng ta sẽ dùng chúng
    //để làm một so sánh khi một route thay đổi thành route khác
    var previousAction = "";
    var previousParams = {};
    // ---------------------------------------------- //
    function startWith()//XÁC ĐỊNH ACTION HIỆN HÀNH PHẢI BẮT ĐẦU VỚI PATH XÁC ĐỊNH TRƯỚC ĐÓ
    {
        // Lúc kiểm tra, chúng ta muốn chắc rằng không có thành phần section nào
        //không phù hợp sẽ có khả năng gây ra lỗi.Vì vậy một là nó phù hợp với toàn
        //bộ, hai là phải bổ sung '.' vào phía cuối
        if(!prefix.length||(action===prefix)||(action.indexOf(prefix+".")===0))
        {
            return(true);
        }
            return(false);
    }
    // ---------------------------------------------- //                     
    function getAction()//NHẬN ACTION HIỆN HÀNH
    {
        return action;
    }
    function getNextSection()//NHẬN CÁC SECTION KẾ TIẾP DỰA VÀO LOCATION TRÊN ACTION PATH
    {
        // Hãy chắc chắn rằng tiền tố prefix có tồn tại trong action hiện hành
        if(!startWith(prefix)){
            return(null);
        } 
        // Nếu tiền tố prefix rỗng thì trả về section đầu tiên
        if (prefix === "") {
            return (sections[0]);
        }
        // Ở trên chúng ta đã xác định prefix là hợp lệ, cho phép tìm hiểu độ sâu của
        //path hiện tại
        var depth = prefix.split(".").length;
        // Nếu độ sâu vượt quá gới hạn , nghĩa là action hiện tại không khai báo các section
        //mới cho path, trả về null
        if (depth === sections.length) {
            return (null);
        }
        //Trả về section sau khi vượt qua các điều kiện
        return (sections[depth]);
    }
    function getParam(name,defaultValue) {// TRẢ VỀ PARAM VỚI TÊN XÁC ĐỊNH,HOẶC DEFAULT VALUE
                                          //HOẶC NULL
        if (ng.isUndefined(defaultValue)) {
            defaultValue = null;
        }
        return (params[name] || defaultValue);
    }
    function getParamAsInt(name, defaultValue) {//TRẢ VỀ PARAM NHƯ MỘT KIỂU INT.NẾU PARAM KHÔNG
        //THỂ TRẢ VỀ NHƯ KIỂU INT THÌ GIÁ TRỊ DEFAULT VALUE XÁC ĐỊNH ĐƯỢC TRẢ VỀ.NẾU DEFAULT
        //VALUE KHÔNG ĐƯỢC ĐỊNH NGHĨA THÌ SẼ TRẢ VỀ ZERO

        //Cố gắng parse sang số
        var valueAsInt = (this.getParam(name, defaultValue || 0) * 1);
        //Kiểm tra nếu ép kiểu lỗi tức valueAsInt isNaN, thì trả về default
        if(isNaN(valueAsInt))
        {
            return (defaultValue || 0);
        } else {
            return (valueAsInt);
        }
     }
    function getRenderContext(requestActionLocation, paramNames) {//TRẢ VỀ RENDERCONTEXT CHO 
        //ACTION PREFIX XÁC ĐỊNH VÀ SUB-SET CỦA CÁC ROUTE PARAM
        // Mặc định request action
        requestActionLocation = ( requestActionLocation || "" );
        // Mặc định các param name 
        paramNames = ( paramNames || [] );
        // Các param name có thể được truyền vào như một name đơn or như một mảng name.
        // Nếu là một name đơn được cung cấo, convert nó vào mảng
        if ( ! ng.isArray( paramNames ) ) {
            paramNames = [ paramNames ];
        }
        return(
            new RenderContext( this, requestActionLocation, paramNames )
        );
    }
    function hasActionChanged() {//XÁC ĐỊNH TRẢ VỀ TRUE NẾU ACTION ĐÃ THAY ĐỔI TRONG REQUEST
        //CONTEXT CỤ THỂ
        return( action !== previousAction );
    }
    function hasParamChanged(paramName, paramValue) {//XÁC ĐỊNH NẾU PARAM XÁC ĐỊNH TRƯỚC ĐÓ
        //BỊ THAY ĐỔI TRONG REQUEST CONTEXT CỤ THỂ,SO SÁNH SỰ THAY ĐỔI BẰNG GIÁ TRỊ CỤ THỂ
        //(paramValue) HOẶC NẾU CHỈ CÓ PARAM NAME ĐƯỢC KHÁI BÁO,SO SÁNH SẼ TRẢ VỀ BẢNG LƯU
        //TRƯỚC ĐÓ
        // Nếu param value được khai báo và gán trị,lúc đó đơn giản chúng ta muốn dùng nó so sánh
        //với bảng lưu hiện tại
        if ( ! ng.isUndefined( paramValue ) ) {
            return( ! isParam( paramName, paramValue ) );
        }
        // Nếu param không có trong bảng lưu trước, lúc đó chúng ta cân nhắc thay đổi nó
        if (
            ! previousParams.hasOwnProperty( paramName ) &&
            params.hasOwnProperty( paramName )
            ) {
            return( true );
            // Nếu param đã có trong bảng lưu trước,nhưng không có ở hiện tại, chúng ta sẽ con nhắc
            //để nó sẽ thay đổi
        } else if (
            previousParams.hasOwnProperty( paramName ) &&
            ! params.hasOwnProperty( paramName )
            ) {
            return( true );
        }

        //Những gì chúng ta làm ở trên không làm thay đổi param hiện hữu;
        //Chúng ta hãy so sánh giá trị thực tế của họ.
        return( previousParams[ paramName ] !== params[ paramName ] );

    }
    function haveParamsChanged(paramNames) {//XÁC ĐỊNH NẾU BẤT KỲ MỘT THAM SỐ TRONG CÁC THAM SỐ
        //XÁC ĐỊNH TRƯỚC ĐÓ BỊ THAY ĐỔI TRONG REQUEST CONTEXT
        for ( var i = 0, length = paramNames.length ; i < length ; i++ ) {
            if ( hasParamChanged( paramNames[ i ] ) ) {
                // Nếu một tham số trong các tham số bị thay đổi, trả về true và không cần tiếp tục
                //kiểm tra các tham số khác
                return( true );
            }
        }
        //Vòng lặp ở trên thì đã xác định có hay ko thay đổi,nên nếu code chạy đến đây thì trả về false
        return( false );
    }
    function isParam(paramName, paramValue) {//KIỂM TRA XEM CÓ PARAM NÀO TRƯỚC ĐÓ VẪN TỒN TẠI
        //GIÁ TRỊ TRƯỚC ĐÓ 
        if (
            params.hasOwnProperty( paramName ) &&
            ( params[ paramName ] == paramValue )
            ) {
            return( true );
        }
        return( false );

    }
    function setContext(newAction, newRouteParams) {//THIẾT LẬP CÁC ĐIỀU KIỆN CHO
        //REQUEST CONTEXT MỚI
        // Copy action hiện tại và các param vào bảng lưu trước đó
        previousAction = action;
        previousParams = params;
        // Thiết lập action mới
        action = newAction;
        // Cắt nhỏ action để xác định các section
        sections = action.split( "." );
        // Update the params collection.
        //Update tập hợp các param mới
        params = ng.copy( newRouteParams );
    }
    // Trả về để sử dụng ở nơi khác như public API.
    return ({
        getNextSection: getNextSection,
        getParam: getParam,
        getParamAsInt: getParamAsInt,
        getRenderContext: getRenderContext,
        hasActionChanged: hasActionChanged,
        hasParamChanged: hasParamChanged,
        haveParamsChanged: haveParamsChanged,
        isParam: isParam,
        setContext: setContext,
        startsWith: startsWith
    });
 });})(angular,webapp)

声明angularjs代码如何获取函数getParam()中的ng.isUndefined和 ng.copy in setContext function(),我不明白(angular,webapp)是取自以及如何声明的,希望有所帮助 - (function(ng,app){code in here})(angular,webapp)是什么意思

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    你应该使用 angular 而不是 ng。 即 angular.copy 或 angular.isUndefined,试试看它是否有效,但它肯定会有效。

    Check the documentation

    【讨论】:

    • 感谢 Tek,但我想要这样的代码,有解决方案吗?
    • 只需将出现的ng 替换为angular
    猜你喜欢
    • 1970-01-01
    • 2016-10-10
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2014-01-15
    • 2014-07-03
    相关资源
    最近更新 更多