`
hudeyong926
  • 浏览: 2034819 次
  • 来自: 武汉
社区版块
存档分类
最新评论

angularJs 前端的页面分解与组装

 
阅读更多

实现前端页面的复用

将分解的页面写成directive. 例如下面这个样子:

angular.module('pageComponents', [], function($compileProvider){
  $compileProvider.directive('commonHeader', function($compile) {
    return {
      templateUrl: 'templete/common/common_header.html',
      replace: true,
      transclude: false,
      restrict: 'A',
      scope: false
    };
  });
  $compileProvider.directive('commonFooter', function($compile) {
    return {
      templateUrl: 'templete/common/common_footer.html',
      replace: true,
      transclude: false,
      restrict: 'A',
      scope: false
    };
  });
});

 事实上,还可以更进一步,将templateUrl写成可传入的参数。但是那样的话就跟下面这个方法差不多了。

 

使用ng-include非常简单。请注意src的参数是表达式,如果要传静态的字符串参数,请用引号将参数包裹起来。就像下面这个例子。

<!-- header -->
<ng-include src="'common_header.html'"></ng-include>
        
<div class="container">
    <!-- angular ng-view -->
    <div ng-view></div>
    <!-- /angular ng-view -->
</div>
        
<!-- Footer -->
<ng-include src="'common_footer.html'"></ng-include>

对ng-include稍作处理,可以实现更复杂的功能。例如下面这个动态加载表单页面的例子,就是通过变换ng-include的src参数实现的。src中的字符串会作为表达式处理(可以是$scope中的变量),所以直接写名字的话需要使用引号。

$compileProvider.directive("dynamicFormInput", ['$http', '$templateCache',
  function($http, $templateCache) {
    return {
      restrict : 'E',
      scope : {
        model : '=',
        section : '='
      },
      template : '<ng:include src="tpl"></ng:include>',
      link : function(scope, iElement, iAttrs) {
        switch(scope.section.sectionTypeId) {
          case 1:
            $http.get('partials/survey/textInput.html', {
              cache : $templateCache
            });
            scope.tpl = "partials/survey/textInput.html";
            break;
          case 2:
            $http.get('partials/survey/selectOneOption.html', {
              cache : $templateCache
            });
            scope.tpl = "partials/survey/selectOneOption.html";
            break;
          case 6:
            if (scope.section.sectionId == 19) {
              $http.get('partials/survey/addressSelection.html', {
                cache : $templateCache
              });
              scope.tpl = "partials/survey/addressSelection.html";
            }
            break;
        }
      }
    }
}]);

最后必须说明的是,这三种方法实质上都是利用ajax来加载模板。使用ajax来实现页面分解这样的功能,相比传统的使用后台动态脚本语言的方案,必然会 带来额外的开销。事实上,不光angularjs是这样,我所接触过的所有前端框架都是如此。这是浏览器端的宿命。这里所造成的负载和与后台动态脚本语言之间的优劣,只能由技术主管自己权衡。

 

ng-include

假设在我们的 controller 中

$scope.myPrimitive = 50;
$scope.myObject    = {aNumber: 11};

 

每一个 ng-include 会生成一个子 Scope,每个子Scope 都继承父Scope
<script type="text/ng-template" id="/tpl1.html">
  <input ng-model="myPrimitive">
  </script>
  <div ng-include src="'/tpl1.html'"></div>

<script type="text/ng-template" id="/tpl2.html">
  <input ng-model="myObject.aNumber">
  </script>
  <div ng-include src="'/tpl2.html'"></div>
输入(比如”77″)到第一个 input 文本框,则子 Scope 将获得一个新的 myPrimitive 属性,覆盖掉父 Scope 的同名属性。这可能和你预想的不一样。
输入(比如”99″)到第二个 input 文本框,并不会在子 Scope 创建新的属性,因为 tpl2.html 将 model 绑定到了一个对象属性(an object property),原型继承在这时发挥了作用,ngModel 寻找对象 myObject 并且在它的父 Scope 中找到了。
如果我们不想把 model 从 number 基础类型改为对象,我们可以用 $parent 改写第一个模板:
<input ng-model="$parent.myPrimitive">
输入(比如”22″)到这个文本框也不会创建新属性了。model 被绑定到了父 scope 的属性上(因为 $parent 是子 Scope 指向它的父 Scope 的一个属性)。
 
 
分享到:
评论

相关推荐

    AngularJS前端框架特性介绍WORD版

    资源名称:AngularJS前端框架特性介绍 WORD版内容简介:本文档主要讲述的是AngularJS前端框架特性介绍;AngularJS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,...

    Angularjs 前端管理员模版源代码

    **AngularJS 前端管理员模版源代码详解** AngularJS 是一款由 Google 主导开发的前端 JavaScript 框架,用于构建动态、交互式的 Web 应用程序。这款框架以其强大的数据绑定和依赖注入机制著称,为开发单页应用(SPA...

    yeoman generator for Angularjs 前端开发神器

    **AngularJS前端开发神器:yeoman generator for Angularjs** AngularJS,由Google维护的一个开源JavaScript框架,被广泛用于构建高效、可维护的单页应用程序(SPA)。它通过提供丰富的指令和依赖注入机制,极大地...

    angularJs前端框架首选样式Twitter Bootstrap

    AngularJS 的首选样式表是 Twitter Bootstrap, Twitter Bootstrap 是目前最受欢迎的前端框架

    AngularJS前端页面操作之用户修改密码功能示例

    最近在做前端设计,主要使用的知识有AngularJS和nodejs来进行页面显示和数据请求、处理等工作。在设计页面比如忘记密码时,发现一个有效的设计思路是很重要的。 就以修改密码为例,要将提示信息友好的展示给用户,...

    angularjs前端框架

    ### AngularJS前端框架知识点详解 #### 一、AngularJS简介 AngularJS是一个开源的JavaScript框架,由Google维护和支持。它旨在通过HTML扩展来解决Web应用开发中的难题,并简化客户端应用的开发过程。AngularJS的...

    疯狂前端开发讲义 jQuery AngularJS Bootstrap前端开发实战

    在前端开发领域,jQuery、AngularJS和Bootstrap是三个极为重要的技术框架,它们分别在不同的层面上解决了网页开发中的各种问题,极大地提高了开发效率和用户体验。接下来,我们将详细探讨这三个技术的核心概念、应用...

    疯狂前端开发讲义——jQuery+AngularJS+Bootstrap前端开发实战

    《疯狂前端开发讲义——jQuery+AngularJS+Bootstrap前端开发实战》是一本深入浅出的前端开发教程,它涵盖了三个核心的前端技术:jQuery、AngularJS和Bootstrap。这些技术在现代网页开发中扮演着至关重要的角色,使得...

    angularjs Web页面框架 jsp源码

    AngularJS 是一个强大的前端JavaScript框架,由Google维护,主要用于构建单页Web应用程序(SPA)。它引入了MVC(模型-视图-控制器)架构模式,极大地简化了动态Web页面的开发。在“angularjs Web页面框架 v13.3.0”...

    springboot+mybatis+swagger+shiro+ecache+nginx+angularjs前端

    标题 "springboot+mybatis+swagger+shiro+ecache+nginx+angularjs前端" 描述了一个集成多种技术的Web应用开发示例。这个项目融合了后端开发框架Spring Boot、持久层框架MyBatis、API文档管理工具Swagger、安全框架...

    angularJS模板

    AngularJS是一款由Google维护的JavaScript框架,用于构建前端Web应用。它主要专注于MVC(Model-View-Controller)架构,让开发人员能够更轻松地处理数据绑定和动态内容。AngularJS模板是其核心特性之一,它允许...

    疯狂前端开发讲义:jQuery+AngularJS+Bootstrap前端开发实战

    《疯狂前端开发讲义:jQuery+AngularJS+Bootstrap前端开发实战》是一本专注于前端开发的实践教程,由知名IT作者李刚编著。本书旨在帮助读者深入理解和掌握前端三大热门框架——jQuery、AngularJS和Bootstrap的使用...

    angularJS的页面加载切换效果

    在本文中,我们将深入探讨如何使用AngularJS实现页面加载与切换时的动画效果。AngularJS是一个流行的前端JavaScript框架,它提供了强大的数据绑定和模块化功能,使得开发动态Web应用变得简单。当我们谈论“页面加载...

    SpringMVC+angularjs 购物车页面

    SpringMVC+angularjs 购物车页面

    使用 AngularJS 构建RIA前端架构实践

    AngularJS 是一个用于构建RIA的开源前端JavaScript框架,它能够与HTML内容一起使用,以创建动态网页。AngularJS通过使用双向数据绑定,可以将模型的变化自动反映到视图上,并将用户对视图的操作自动应用到模型上,...

    angularjs单页面应用因为播放器源码

    这个"angularjs单页面应用因为播放器源码"是一个使用AngularJS开发的音乐播放器项目的源代码,旨在帮助开发者了解如何在AngularJS环境下创建交互式的用户界面,特别是与音频播放相关的功能。 在AngularJS中,单页面...

    前端 - 贺天卓《使用 AngularJS 构建RIA前端架构实践》.pdf

    Modules在AngularJS中充当着容器的角色,用于将应用分解成逻辑上的模块。每个AngularJS应用至少包含一个模块,它负责定义应用的配置和运行阶段的行为。模块化可以让代码更加清晰,也便于组织和管理大型项目。 7. ...

    angularjs Web页面框架 v17.2.3.zip

    AngularJS 是一个强大的前端JavaScript框架,由Google维护,主要用于构建单页Web应用程序(SPA)。它提供了丰富的功能,如数据绑定、依赖注入、指令系统、模块化等,极大地简化了Web开发流程。标题中的"angularjs ...

Global site tag (gtag.js) - Google Analytics