angularjs在指令中使用子作用域引申出的‘值复制’与‘引用复制’的问题

<!DOCTYPE html>
<html lang="zh-CN" ng-app="app">
<head>
    <meta charset="utf-8">
    <title>在指令中使用子作用域</title>
    <link rel="stylesheet" href="../bootstrap.min.css">
</head>
<body>
    <h4>JavaScript对象要么是值复制要么是引用复制。字符串、数字和布尔型变量是值 复制。数组、对象和函数则是引用复制。下面来看看这两个的区别</h4>
    1.值复制
    <div ng-controller="SomeController">
        初始值:<input type="text" ng-model="someBareValue"><br>
        {{ someBareValue }}
        <button ng-click="someAction()">父作用域</button>
        <div ng-controller="ChildController">
            {{ someBareValue }}
            <button ng-click="childAction()">子作用域</button>
        </div>
    </div>
    1.引用复制
    <div ng-controller="SController">
        {{ someModel.someValue }}
        <button ng-click="someAction()">父作用域</button>
        <div ng-controller="CController">
            {{ someModel.someValue }}
            <button ng-click="childAction()">子作用域</button>
        </div>
    </div> 

    <script src="../angular.min.js"></script>
    <script>
        angular.module(‘app‘, [])
        // 值复制
        .controller(‘SomeController‘, function($scope) {
             $scope.someBareValue = ‘‘;  // 不赞成这样声明数据 应该以数据模型的方式声明一个对象 参见 引用复制
             $scope.someAction = function() {
                 $scope.someBareValue = ‘hello human, from parent‘;
             };
        })
        .controller(‘ChildController‘, function($scope) {
            $scope.childAction = function() {
                $scope.someBareValue = ‘hello human, from child‘;
            };
        })

        // 引用复制
        .controller(‘SController‘, function($scope) {
             $scope.someModel = {
                 someValue: ‘hello computer‘
             };
             $scope.someAction = function() {
                 $scope.someModel.someValue = ‘hello human, from parent‘;
             };
        })
        .controller(‘CController‘, function($scope) {
            $scope.childAction = function() {
                $scope.someModel.someValue = ‘hello human, from child‘;
            };
        }); 

    </script>
</body>
</html>

这里我着重说下值复制,引用复制没啥可说的

  /*
            关于值复制:

            ChildController属于SomeController的子作用域 那么理所应当 在子作用域中的$scope.someBareValue没有初始值的时候,
            他会复制父作用域中$scope.someBareValue的值作为自己的值,当父作用域中的$scope.someBareValue的值改变时也会造成子作用域
            中的$scope.someBareValue的值改变,但是当子作用域中的$scope.someBareValue有初始值的时候,父作用域和子作用域中的$scope.someBareValue
            就成了两个完全不一样的东西了

            通俗点讲就是:当你兜里没钱的时候,你爸爸兜里的钱就是你的钱,你爸爸有钱你就有钱,你爸爸没钱你就没钱。
            但是当你组建了家庭能够自己挣钱的时候,你爸爸就留着他自己的钱养老了,不会再给你了,而你的钱从始至终都属于你自己!
            物质上别吝啬自己的钱,对自己的亲人好一点!
*/
 
时间: 2024-08-27 09:17:41

angularjs在指令中使用子作用域引申出的‘值复制’与‘引用复制’的问题的相关文章

AngularJS之指令中controller与link(十二)

前言 在指令中存在controller和link属性,对这二者心生有点疑问,于是找了资料学习下. 话题 首先我们来看看代码再来分析分析. 第一次尝试 页面: <custom-directive></custom-directive> 脚本: angular .module('app',[]) .directive('customDirective', customDirective); function customDirective() { var directive = { r

AngularJS 作用域里的值复制和引用复制

对象要么是值复制要么是引用复制.字符串.数字和布尔型变量是值 复制.数组.对象和函数则是引用复制. 1.值复制: <!doctype html> <html ng-app="myApp"> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.3/angular.js"></script> </head

Angular JS 中 ng-controller 值复制和引用复制

我们知道在使用ng-app或者ng-controller指令的时候,都会创建一个新的作用域($rootScope或者是$scope),并且在使用ng-controller指令创建的作用域会继承父级作用域($rootScope或者是$scope)所有的方法和属性. 但是这里继承的属性就有一些学问了 运行如下代码: html <div ng-controller="SomeController"> {{ someBareValue }} <button ng-click=

js中函数传递参数,究竟是值传递还是引用传递?

记住真理: js函数传递参数,不管是简单数据类型,还是引用数据类型,都是值传递!! 下面是js红包书里面的例子: function setName(obj) { obj.name = "Nicholas"; obj = new Object(); obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name); // "Nicholas" 肯定

AngularJs ng-repeat指令中怎么实现含有自定义指令的动态html

今天用angular写table的时候,遇到了一个问题.在ng-repeat中,含有动态的html,而这些html中含有自定义指令. 因为希望实现一个能够复用的table,所以定义了一个指令myStandTable,指令代码大概如下: 1 var myCommon = angular.module("myCommon",[]); 2 myCommon.directive("myStandTable", function () { 3 return { 4 restr

IE 中创建 子窗口 传值 与接收值 【window.showModalDialog】

父窗口 创建一个窗口 var backinfo = window.showModalDialog('UserSelect.aspx', '', 'dialogHeight=600px; dialogWidth= 600px; edge=Raised; center=Yes;resizable= No; status= no;help=no'); 子窗口 调用JS关闭自身并返回值 function SelectCompany(obj) {                            wi

CDM中遍历域及其约束条件、取值范围、引用它的项目

Option   ExplicitValidationMode   =   TrueInteractiveMode =   im_BatchDim   mdl   '当前model'获取当前活动modelSet   mdl   =   ActiveModelIf   (mdl   Is   Nothing)   Then         MsgBox   "There   is   no   current   Model "ElseIf   Not   mdl.IsKindOf(Pd

控制器controller与指令中的link、controller中同名变量作用域的关系

angularjs中的作用域与原生js中的函数嵌套原理一致,都是存在作用域的继承.若在子控制器(同样包括在指令中的link或是controllerding中定义变量,此时指令中必须未使用scope独立作用域)未定义相关变量,那么它会向父控制器一层层查找,直到找到位为止. 若在自定义指令中的link.controller与该指令的父控制器定义了同名变量,那它的作用域是如何的呢,以及指令中的独立作用域scope会对改变量产生怎样的影响,以例说明: HTML: <div ng-controller=&qu

第002弹:Java 中的值传递和引用传递

在 Java 的代码开发过程中,为了尽可能提高方法的复用性,明确方法的作用,同时防止一个方法内部过于臃肿的问题,往往会创建许多方法,那么不可避免地会涉及到参数传递的问题.通常来说,我们将 Java 中的参数传递分为两种:值传递和引用传递. 值传递:参数在进入方法时,将入参深度复制一个副本,在方法内部操作的是入参的副本,在方法执行完毕之后,外部的入参没有发生任何变化. 引用传递:在方法内部操作的是参数本身,对入参做出的修改会保留到方法的外部. 那么在 Java 中,哪些情况属于值传递,哪些情况属于