AngularJS_自定义控件_入门学习1

Posted 深入学习ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AngularJS_自定义控件_入门学习1相关的知识,希望对你有一定的参考价值。

简介: 本篇博客是在学习AngularJS自定义控件的学习记录,作为一个学习示例...   

 

A-基本架构介绍

新建一个AngularJs的项目,大概项目结构如下:

项目结构:

  大概是由:app.js,bootstrap.js,app-routes.js,config.json,common-config.json等主要文件组成。

  app.js--当做项目的起始文件吧,里面会包含:注入的其他JS模块,过滤设置,配置文件的设置等。

define(function (require, exports, module) {
    var angular = require(\'angular\');
    var asyncLoader = require(\'angular-async-loader\');

    require(\'angular-ui-router\');
    require(\'angular-seagull2-common\');
    require(\'angular-seagull2-oauth\');
    require(\'angular-seagull2-workflow\');
    require(\'angular-seagull2-infrastructure\');
    require(\'angular-indentity-code\');
    require(\'angular-seagull2-empprovider\');
    require(\'angular-seagull2-careerdev\');
    require(\'angular-seagull2-corporation\');

    var app = angular.module(\'app\', [
        \'ui.router\',
        \'angular-seagull2-common\',
        \'angular-seagull2-workflow-oauth\',
        \'angular-seagull2-workflow\',
        \'angular-seagull2-infrastructure\',        
        \'angular-datepicker\',
        \'angular-indentity-code\',
        \'angular-seagull2-empprovider\',
        \'angular-seagull2-careerdev\',
        \'angular-seagull2-corporation\']);

    //常规金额:由于angular默认的金额格式如果是负数的话显示格式为(12,345.00),使用customCurrency替换成:-12,345.00
    app.filter(\'customCurrency\', ["$filter", function ($filter)
    {
        return function (amount, currencySymbol)
        {
            var currency = $filter(\'currency\');

            if (amount < 0)
            {
                return currency(amount, currencySymbol).replace("(", "-").replace(")", "");
            }

            return currency(amount, currencySymbol);
        };
    }]);

    //将阿拉伯数字转化为中文大写
    app.filter(\'cnuppercase\', ["$filter", function ($filter)
    {
        return function(n)
        {
            if (n === \'\' || n === \'0\' || n === 0)
            {
                return "";
            }
            if (!/^(0|[1-9]\\d*)(\\.\\d+)?$/.test(n))
            {
                return "";
            }
            
            var unit = "千百拾亿千百拾万千百拾元角分", str = "";
            n += "00";
            var p = n.indexOf(\'.\');
            if (p >= 0)
                n = n.substring(0, p) + n.substr(p + 1, 2);
            unit = unit.substr(unit.length - n.length);
            for (var i = 0; i < n.length; i++)
                str += \'零壹贰叁肆伍陆柒捌玖\'.charAt(n.charAt(i)) + unit.charAt(i);
            return str.replace(/零(千|百|拾|角)/g, "零")
                .replace(/(零)+/g, "零")
                .replace(/零(万|亿|元)/g, "$1")
                .replace(/(亿)万|壹(拾)/g, "$1$2")
                .replace(/^元零?|零分/g, "")
                .replace(/元$/g, "元整");
        };
    }]);
    ////格式化字符串
    //var template1 = "我是{0},今年{1}了";
    //var template2 = "我是{name},今年{age}了";
    //var result1 = template1.format("loogn", 22);
    //var result2 = template2.format({ name: "loogn", age: 22 });
    //两个结果都是"我是loogn,今年22了"
    String.prototype.format = function (args)
    {
        var result = this;
        if (arguments.length > 0)
        {
            if (arguments.length == 1 && typeof (args) == "object")
            {
                for (var key in args)
                {
                    if (args[key] != undefined)
                    {
                        var reg = new RegExp("({" + key + "})", "g");
                        result = result.replace(reg, args[key]);
                    }
                }
            } else
            {
                for (var i = 0; i < arguments.length; i++)
                {
                    if (arguments[i] != undefined)
                    {
                        var reg = new RegExp("({[" + i + "]})", "g");
                        result = result.replace(reg, arguments[i]);
                    }
                }
            }
        }
        return result;
    };

    var commonConfig = require(\'text!../common-config.json\');
    var config = require(\'text!../config.json\');
    app.config([\'configureProvider\', function (configureProvider)
    {
        configureProvider.configure(commonConfig);
        configureProvider.configure(config);
    }]);
    asyncLoader.configure(app);
    module.exports = app;
});
View Code

    bootstrap.js--理解成包管理文件,其中有包的文件地址和包的依赖关系等。

require.config({
    map: {
        \'*\': {
            \'ie8css\': \'https://develop-cdn.sinooceangroup.com/libs/requirecss-branch-seagull2/1.1.0/ie8css.min.js\',
            \'css\': \'https://develop-cdn.sinooceangroup.com/libs/requirecss-branch-seagull2/1.1.0/css.min.js\'
        }
    },
    waitSeconds: 0,
    //配置angular的路径
    paths: {
        \'angular\': \'https://develop-cdn.sinooceangroup.com/libs/angular/1.2.27/angular.min\',
        \'angular-cookies\': \'https://develop-cdn.sinooceangroup.com/libs/angular/1.2.27/angular-cookies.min\'
    },
    //这个配置是你在引入依赖的时候的包名
    shim: {
        \'text\': { exports: \'text\' },
        \'angular\': { exports: \'angular\' },
        \'angular-cookies\': { exports: \'angular-cookies\', deps: [\'angular\'] },
        \'angular-ui-router\': { deps: [\'angular\'] },
        \'angular-ui-tree\': { deps: [\'angular\', \'css!https://develop-cdn.sinooceangroup.com/libs/angular-ui-tree/2.15.0/dist/angular-ui-tree.min\'] },
        \'angular-datepicker\': { deps: [\'angular\', \'css!https://develop-cdn.sinooceangroup.com/libs/datepicker-branch-seagull2/1.0.5/datepicker-branch-seagull2\'] },
        \'angular-seagull2-common\': {
            deps: [
                \'angular\',
                \'urijs/uri\',
                \'angular-ui-tree\',
                \'css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common\',
                \'ie8css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common.ie8\']
        }
    }
});

require([\'angular\', \'webuploader\',
    \'./javascript/app-routes\'],
    function (angular, webuploader) {
        angular.element(document).ready(function () {
            angular.bootstrap(document, [\'app\']);
            angular.element(document).find(\'html\').addClass(\'ng-app\');
        });
        window.WebUploader = webuploader;
    });
View Code

    app-routes.js--理解为路由器,是配置页面,JS控制器管理,及参数传递及登录验证等的地方。

define(function (require)
{
    var app = require(\'../javascript/app\');

    app.config([\'$stateProvider\', \'$urlRouterProvider\', function ($stateProvider, $urlRouterProvider)
    {
        var csspathBase = "https://develop-cdn.sinooceangroup.com/libs/seagull2-workflow-responsive/1.0.3";

        //招聘申请-前置页面     
        $stateProvider.state(\'recruitRquestFontpage\', {
            url: \'/recruitRquestFontpage\',
            templateUrl: \'./views/recruitRequest/recruitRquestFontPage.html\',
            controller: \'fontPage-controller\',
            controllerUrl: \'./javascript/controllers/recruitRequest/fontPage-controller.js\',
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });
        //招聘申请     
        $stateProvider.state(\'RecruitRequest\', {
            url: \'/RecruitRequest\',
            useWorkflow: true,
            workflowUrlBase: \'/RecruitRequestWf\',
            workflowScene: {
                \'Draft\': {
                    templateUrl: \'./views/recruitRequest/list.html\',
                    controller: \'list-controller\',
                    controllerUrl: \'./javascript/controllers/recruitRequest/list-controller.js\'
                },
                \'Approval\': {
                    templateUrl: \'./views/recruitRequest/list.html\',
                    controller: \'list-controller\',
                    controllerUrl: \'./javascript/controllers/recruitRequest/list-controller.js\'
                },
                \'ReadOnly\': {
                    templateUrl: \'./views/recruitRequest/list.html\',
                    controller: \'list-controller\',
                    controllerUrl: \'./javascript/controllers/recruitRequest/list-controller.js\'
                }
            },
            startupWorkflow: true,
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });

        //自定义控件测试
        $stateProvider.state(\'test\', {
            url: \'/test\',
            templateUrl: \'./views/test/test.html\',
            controller: \'test_controller\',
            controllerUrl: \'./javascript/controllers/test/test-controller.js\',
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });

        //职位状态更新-前置页面
        $stateProvider.state(\'JobPostStateMaintainList\', {
            url: \'/JobPostStateMaintainList\',
            templateUrl: \'./views/JobPostStateMaintain/list.html\',
            controller: \'list-controller\',
            controllerUrl: \'./javascript/controllers/JobPostStateMaintain/list-controller.js\',
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });
        //职位状态更新     
        $stateProvider.state(\'JobPostStateMaintain\', {
            url: \'/JobPostStateMaintain\',
            useWorkflow: true,
            workflowUrlBase: \'/JobPostStateMaintain\',
            workflowScene: {
                \'Draft\': {
                    templateUrl: \'./views/JobPostStateMaintain/edit.html\',
                    controller: \'edit-controller\',
                    controllerUrl: \'./javascript/controllers/JobPostStateMaintain/edit-controller.js\'
                },
                \'ReadOnly\': {
                    templateUrl: \'./views/JobPostStateMaintain/edit.html\',
                    controller: \'edit-controller\',
                    controllerUrl: \'./javascript/controllers/JobPostStateMaintain/edit-controller.js\'
                }
            },
            startupWorkflow: true,
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });
        //消息通知    
        $stateProvider.state(\'Notify\', {
            url: \'/Notify?taskID\',
            templateUrl: \'./views/notify/notify-dialog.html\',
            controller: \'notify-dialog-controller\',
            controllerUrl: \'./javascript/controllers/notify/notify-dialog-controller.js\',
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });
        //录用洽谈-查看     
        $stateProvider.state(\'EmployeExecuteView\', {
            url: \'/EmployeExecuteView?id&taskID\',
            templateUrl: \'./views/EmployeExecute/employed-discuss-view.html\',
            controller: \'employed-discuss-view-controller\',
            controllerUrl: \'./javascript/controllers/EmployeExecute/employed-discuss-view-controller.js\',
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });
        //录用洽谈     
        $stateProvider.state(\'EmployeExecute\', {
            url: \'/EmployeExecute\',
            useWorkflow: true,
            workflowUrlBase: \'/EmployeExecuteWf\',
            workflowScene: {
                \'Draft\': {
                    templateUrl: \'./views/EmployeExecute/employed-discuss.html\',
                    controller: \'employed-discuss-controller\',
                    controllerUrl: \'./javascript/controllers/EmployeExecute/employed-discuss-controller.js\'
                },
                \'GeneratedNotice\': {
                    templateUrl: \'./views/EmployeExecute/employed-discuss.html\',
                    controller: \'employed-discuss-controller\',
                    controllerUrl: \'./javascript/controllers/EmployeExecute/employed-discuss-controller.js\'
                },
                \'BackgroundCheck\': {
                    templateUrl: \'./views/EmployeExecute/employed-discuss.html\',
                    controller: \'employed-discuss-controller\',
                    controllerUrl: \'./javascript/controllers/EmployeExecute/employed-discuss-controller.js\'
                },
                \'ReadOnly\': {
                    templateUrl: \'./views/EmployeExecute/employed-discuss.html\',
                    controller: \'employed-discuss-controller\',
                    controllerUrl: \'./javascript/controllers/EmployeExecute/employed-discuss-controller.js\'
                }
            },
            startupWorkflow: true,
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });

        //内部推荐-前置页面
        $stateProvider.state(\'InternalRecommendRequestList\', {
            url: \'/InternalRecommendRequestList\',
            templateUrl: \'./views/InternalRecommendRequest/list.html\',
            controller: \'list-controller\',
            controllerUrl: \'./javascript/controllers/InternalRecommendRequest/list-controller.js\',
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });
        //内部推荐更新     
        $stateProvider.state(\'InternalRecommendRequest\', {
            url: \'/InternalRecommendRequest\',
            useWorkflow: true,
            workflowUrlBase: \'/InternalRecommendRequest\',
            workflowScene: {
                \'Draft\': {
                    templateUrl: \'./views/InternalRecommendRequest/edit.html\',
                    controller: \'edit-controller\',
                    controllerUrl: \'./javascript/controllers/InternalRecommendRequest/edit-controller.js\'
                },
                \'ReadOnly\': {
                    templateUrl: \'./views/InternalRecommendRequest/edit.html\',
                    controller: \'edit-controller\',
                    controllerUrl: \'./javascript/controllers/InternalRecommendRequest/readonly-controller.js\'
                }
            },
            startupWorkflow: true,
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });

        //面试阶段管理     
        $stateProvider.state(\'InterviewManage\', {
            url: \'/InterviewManage\',
            useWorkflow: true,
            workflowUrlBase: \'/InterviewManageWf\',
            workflowScene: {
                \'Draft\': {
                    templateUrl: \'./views/InterviewManage/list.html\',
                    controller: \'list-controller\',
                    controllerUrl: \'./javascript/controllers/InterviewManage/list-controller.js\'
                },
                \'ReadOnly\': {
                    templateUrl: \'./views/InterviewManage/edit.html\',
                    controller: \'edit-controller\',
                    controllerUrl: \'./javascript/InterviewManage/JobPostStateMaintain/edit-controller.js\'
                }
            },
            startupWorkflow: true,
            requiredLogin: true,
            dependencies: [\'css!\' + csspathBase + \'/form\', \'ie8css!\' + csspathBase + \'/form_ie8\']
        });
    }]);
});
View Code

    config.json,common-config.json  配置文件--里面配置了一些常用数据(登录地址,参数等),是在app.js中加入了配置才起的作用,

var commonConfig = require(\'text!../common-config.json\');
    var config = require(\'text!../config.json\');
    app.config([\'configureProvider\', function (configureProvider)
    {
        configureProvider.configure(commonConfig);
        configureProvider.configure(config);
    }]);
    asyncLoader.configure(app);
    module.exports = app;

 

B-自定义控件示例:

我的自定义控件文件为:angular-seagull2-empprovider.js

注意:

b1:  $ResumeSrummaryDirective  标记的名字要大小保持一致;

b2:  angular.module("angular-seagull2-empprovider.resume-srummary" 要和module.directive(\'resumeSrummary\', $ResumeSrummaryDirective);

b3:  需要注意的是参数中:scope: { resumeCode: \'=resumeCode\' },   不仅可以传入字符串,还可以传输对象和回调方法,当然对象和回调方法需要在主页面定义好。

如:

scope: { resumeCode: \'=resumeCode\',data:\'=data\',rollback:\'=roolback\' }

<interview-arrangement-evaluate resume-code="item.code" data="datarollback="rollback"></interview-arrangement-evaluate>

 

要遵从驼峰命名规范,首字母小写。

//简历评价
(function (window, angular) {
    \'use strict\';
    $ResumeSrummaryDirective.$inject = [\'$http\', \'seagull2Url\', \'wfWaiting\', \'sogModal\', \'sogValidator\', \'ValidateHelper\', \'IndentityCodeHelper\', \'regionType\'];

    function $ResumeSrummaryDirective($http, seagull2Url, wfWaiting, sogModal, sogValidator, ValidateHelper, IndentityCodeHelper, regionType) {
        return {
            restrict: \'E\',
            replace: true,
            transclude: true,
            scope: { resumeCode: \'=resumeCode\',data:\'=data\',rollback:\'=roolback\'  },
            template: \'<a ng-click="showResumeSrummary()" style="color:blue;margin-left:5px;float:left;cursor:pointer;"><span>面试评价</span></a>\',
            link: {
                pre: function ($scope, $element, $attrs) {
                    $scope.showResumeSrummary = function () {
                        //简历评价事件
                        $http.post(seagull2Url.getPlatformUrl("/Resume/LoadResumeSrummary?code=" + $scope.resumeCode)).success(function (result) {
                            if (result) {
                                sogModal.openLayer(\'<div><div ng-include="\\\'views/common/resume-srummary-template.html\\\'"></div></div>\', [\'$scope\', function ($modalScope) {
                                    $modalScope.resumeSurmmarys = result;

//确定事件--调用回调函数
$modalScope.ok=function(){
$scope.roolback($scope.data);
                      }
//关闭按钮事件 $modalScope.close = function () { $modalScope.closeThisDialog(); }; }], undefined, {}, undefined, undefined); wfWaiting.hide(); } }).error(function (err, status) { wfWaiting.hide(); console.log(err + "||" + status); //sogModal.openMessageDialog(status, result); }); }; } } }; } //声明模块angular-seagull2-empprovider.resume-srummary var module = angular.module("angular-seagull2-empprovider.resume-srummary", [ \'angular-seagull2-common\', \'angular-seagull2-workflow\']); //创建resume-editor模块指令 module.directive(\'resumeSrummary\', $ResumeSrummaryDirective); }(window, window.angular)); (function (angular) { \'use strict\'; angular.module(\'angular-seagull2-empprovider\', [ \'angular-seagull2-empprovider.recruit-request-view\', \'angular-seagull2-empprovider.ogu-unit\', \'angular-seagull2-empprovider.resume-editor\', \'angular-seagull2-empprovider.resume-srummary\', ]); }(window.angular));

 

a1-根据结构的分析,要想使该JS起作用,需要在app.js中注入该JS才行(下面只展示了关键代码):

define(function (require, exports, module) {
    var angular = require(\'angular\');
    var asyncLoader = require(\'angular-async-loader\');

    require(\'angular-seagull2-empprovider\');

    var app = angular.module(\'app\', [

        \'angular-seagull2-empprovider\',
     ]);
  
     var commonConfig = require(\'text!../common-config.json\');
    var config = require(\'text!../config.json\');
    app.config([\'configureProvider\', function (configureProvider)
    {
        configureProvider.configure(commonConfig);
        configureProvider.configure(config);
    }]);
    asyncLoader.configure(app);
    module.exports = app;
});

a2-需要在包文件管理中配置包源:

require.config({
    map: {
        \'*\': {
            \'ie8css\': \'https://develop-cdn.sinooceangroup.com/libs/requirecss-branch-seagull2/1.1.0/ie8css.min.js\',
            \'css\': \'https://develop-cdn.sinooceangroup.com/libs/requirecss-branch-seagull2/1.1.0/css.min.js\'
        }
    },
    waitSeconds: 0,
    //配置angular的路径
    paths: {
        \'angular\': \'https://develop-cdn.sinooceangroup.com/libs/angular/1.2.27/angular.min\',
        \'angular-cookies\': \'https://develop-cdn.sinooceangroup.com/libs/angular/1.2.27/angular-cookies.min\',
        \'angular-ui-router\': \'https://develop-cdn.sinooceangroup.com/libs/angular-ui-router/0.2.18/release/angular-ui-router.min\',
        \'angular-ui-tree\': \'https://develop-cdn.sinooceangroup.com/libs/angular-ui-tree/2.15.0/dist/angular-ui-tree.min\',
        \'angular-async-loader\': \'https://develop-cdn.sinooceangroup.com/libs/angular-async-loader/1.3.2/angular-async-loader.min\',
        \'text\': \'https://develop-cdn.sinooceangroup.com/libs/text/2.0.15/text.min\',
        \'jquery\': \'https://develop-cdn.sinooceangroup.com/libs/jquery/1.12.3/dist/jquery.min\',
        \'webuploader\': \'https://develop-cdn.sinooceangroup.com/libs/webuploader/0.1.8/dist/webuploader.min\',
        \'urijs\': \'https://develop-cdn.sinooceangroup.com/libs/urijs/1.17.1/src\',

        \'angular-seagull2-common\': \'https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common\',
        \'angular-seagull2-oauth\': \'https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-oauth/1.1.9/angular-seagull2-oauth\',
        \'angular-seagull2-workflow\': \'https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-workflow/1.5.1/angular-seagull2-workflow\',
        \'angular-seagull2-infrastructure\': \'https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-infrastructure/0.1.4/angular-seagull2-infrastructure\',
        \'angular-datepicker\': \'https://develop-cdn.sinooceangroup.com/libs/datepicker-branch-seagull2/1.0.5/datepicker-branch-seagull2\',
        \'angular-seagull2-empprovider\': \'./javascript/angular-seagull2-empprovider\',
        \'angular-seagull2-careerdev\': \'./javascript/angular-seagull2-careerdev\',
        \'angular-indentity-code\': \'./javascript/angular-indentity-code\',
        \'angular-seagull2-corporation\': \'./javascript/angular-seagull2-corporation\'
    },
    //这个配置是你在引入依赖的时候的包名
    shim: {
        \'text\': { exports: \'text\' },
        \'angular\': { exports: \'angular\' },
        \'angular-cookies\': { exports: \'angular-cookies\', deps: [\'angular\'] },
        \'angular-ui-router\': { deps: [\'angular\'] },
        \'angular-ui-tree\': { deps: [\'angular\', \'css!https://develop-cdn.sinooceangroup.com/libs/angular-ui-tree/2.15.0/dist/angular-ui-tree.min\'] },
        \'angular-datepicker\': { deps: [\'angular\', \'css!https://develop-cdn.sinooceangroup.com/libs/datepicker-branch-seagull2/1.0.5/datepicker-branch-seagull2\'] },
        \'angular-seagull2-common\': {
            deps: [
                \'angular\',
                \'urijs/uri\',
                \'angular-ui-tree\',
                \'css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common\',
                \'ie8css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common.ie8\']
        },
        \'angular-seagull2-oauth\': {
            deps: [
                \'angular\',
                \'angular-cookies\',
                \'angular-ui-router\',
                \'urijs/uri\',
                \'angular-seagull2-common\']
        },
       
        \'angular-seagull2-empprovider\': {
            deps: [
                \'angular\',
                \'angular-seagull2-common\',
                \'angular-seagull2-workflow\',
                \'css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-infrastructure/0.1.4/angular-seagull2-infrastructure\',
                \'ie8css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-infrastructure/0.1.4/angular-seagull2-infrastructure.ie8\']
        }
    }
});

require([\'angular\', \'webuploader\',
    \'./javascript/app-routes\'],
    function (angular, webuploader) {
        angular.element(document).ready(function () {
            angular.bootstrap(document, [\'app\']);
            angular.element(document).find(\'html\').addClass(\'ng-app\');
        });
        window.WebUploader = webuploader;
    });

 

B-自定义控件JS简单分析:

--->创建控件指令函数--->注入指令函数

 

C-使用示例:

重要:angularjs在使用自定义控件时,遵循“驼峰命名规范”!即由于控件自定义参数为:resumeCode,所以在使用时应为:resume-code,并将字母改为小写,值也不需要加{{}}标识

<resume-srummary resume-code="resumeCode"></resume-srummary>

 

D-总结--自定义控件显示内容可更改:

自定义控件模板template数据可变,可以直接使用angular语法如:{{inputName}}

在上面的自定义控件模板为:

template: \'<a ng-click="showResumeSrummary()" style="color:blue;margin-left:5px;float:left;cursor:pointer;"><span>面试评价</span></a>\',
改为:
template: \'<a ng-click="showResumeSrummary()" style="color:blue;margin-left:5px;float:left;cursor:pointer;"><span>{{inputName}}</span></a>\',
参数定义:
link: {

    pre: function ($scope, $element, $attrs)
   {
         if ($scope.inputName == null || $scope.inputName == undefined || $scope.inputName == \'\')
         {
                $scope.inputName = "面试评价";
         }

    }

   使用方式修改为:

<resume-srummary resume-code="resumeCode" input-name="自定义文字"></resume-srummary>

 

ResumeSrummaryDirective

以上是关于AngularJS_自定义控件_入门学习1的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS入门学习笔记一

自定义控件基础01_菜单轮__viewPager_下拉框_自定义开关

自定义控件基础02_下拉刷新_侧拉菜单_自定义属性

angularjs插件怎么使用

自定义View_1_关于View,ViewGroup的测量和绘制流程

自定义数字加减控件