zoukankan      html  css  js  c++  java
  • (七)Angularjs

    控制器的作用

    没有控制器/controller,我们没有地方定义业务模型

    比如:ng-init指令。我们可以使用ng-init指令在scope对象上定义数据

    <div ng-init="sb={name:'somebody',gender:'male',age:28}">
    </div>

    控制器让我们有机会在scope上定义我们的业务逻辑,具体说,可以使用控制器:

    •对scope对象进行初始化

    •向scope对象添加方法

    在模板中声明控制器

    在一个HTML元素上使用ng-controller指令,就可以引入一个控制器对象:

    <div ng-controller="myController">...</div>

    控制器的实现

    控制器实际上就是一个JavaScript的类/构造函数:

     1 //控制器类定义
     2 var myControllerClass = function($scope){
     3     //模型属性定义
     4     $scope.text = "...";
     5     //模型方法定义
     6     $scope.do = function(){...};
     7 };
     8 //在模块中注册控制器
     9 angular.module('someModule',[])
    10 .controller("myController",myControllerClass);

    控制器对scope的作用

    注意:ng-controller指令总是创建一个新的scope对象:

    流程:

    •ng-app指令引发$rootScope对象的创建。开始时,它是一个空对象。

    •body元素对应的scope对象还是$rootScope。ng-init指令将sb对象挂在了$rootScope上。

    •div元素通过ng-controller指令创建了一个新的scope对象,这个对象的原型是$rootScope。

    •因为原型继承的关系,在do函数中对sb的引用指向$rootScope.sb。

    初始化$scope对象

    <html ng-app="test">
    <head>
        <script src="angular.js"></script>
    </head>
    <body>
        <div ng-controller="testController">
            <div>name : {{vm.sb.name}}</div>
            <div>gender : {{vm.sb.gender}}</div>
            <div>age : {{vm.sb.age}}</div>
            <div>career : {{vm.sb.career}}</div>
            <div><img ng-src="{{vm.sb.photo}}"></div>
        </div>
    </body>
    </html>
     1 var testControllerClass = function($scope){
     2     //view model
     3     $scope.vm = {
     4         sb : {
     5             name : "Jason Stantham",
     6             gender : "male",
     7             age : 48,
     8             career : "actor",
     9             photo : "http:1.jpg"
    10         }
    11     };
    12 };
    13 angular.module("ezstuff",[])
    14 .controller("testController",testControllerClass);

    向scope对象添加方法

    <html ng-app="test">
    <head>
        <script src="angular.js"></script>
    </head>
    <body>
        <div ng-controller="testController">
            <button ng-click="vm.shuffle();">shuffle</button>
            <div>name : {{vm.sb.name}}</div>
            <div>gender : {{vm.sb.gender}}</div>
            <div>age : {{vm.sb.age}}</div>
            <div>career : {{vm.sb.career}}</div>
            <div><img ng-src="{{vm.sb.photo}}"></div>
        </div>
    </body>
    </html>
     1 var testControllerClass = function($scope){
     2     //view model
     3     $scope.vm = {
     4         sb : {
     5             name : "Jason Stantham",
     6             gender : "male",
     7             age : 48,
     8             career : "actor",
     9             photo : "1.jpg"
    10         },
    11         shuffle : function(){
    12                 var repo = [
    13                     {name:"Jason Stantham",gender:"male",age:48,career:"actor",photo:"2.jpg"},
    14                     {name:"Jessica Alba",gender:"female",age:32,career:"actress",photo:"4.jpg"},
    15                     {name:"Nicolas Cage",gender:"male",age:53,career:"actor",photo:"4.jpg"},
    16                     {name:"崔永元",gender:"male",age:48,career:"independent journalist",photo:"5.jpg"}];
    17                 var idx = Math.floor(Math.random()*repo.length);
    18                 $scope.vm.sb = repo[idx];
    19         }
    20     };
    21 };
    22 angular.module("test",[])
    23 .controller("testController",testControllerClass );

    控制器不要以下操作

    •DOM操作:应当将DOM操作使用指令/directive进行封装。

    •变换输出形式:应当使用过滤器/filter对输出显示进行转化。

    •跨控制器共享代码:对于需要复用的基础代码,应当使用服务/service进行封装

  • 相关阅读:
    VS中修改工程名的解决方案
    C++内存管理(转)http://www.cnblogs.com/qiubole/archive/2008/03/07/1094770.html
    OGR中空间叠加函数Union
    如何迅速掌握并提高linux运维技能(收藏文)
    Win10系统应用图标显示感叹号无法打开(详细版)
    IBM带库故障处理(驱动器down,磁带卡带,重配置)Netbackup
    2.2 Netbackup磁带库管理
    重复,空
    Oracle数据库几种启动方式及查询当前状态
    鸡汤自勉
  • 原文地址:https://www.cnblogs.com/huair_12/p/4344324.html
Copyright © 2011-2022 走看看