angular数据传递练习

父级像下级传送数据

1
$scope.$broadcast必须在一个函数中才有效果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>AngularJS broadcast译为广播,即上级传递下级。</title>
<script src="https://cdn.bootcss.com/angular.js/1.7.0/angular.min.js"></script>
</head>
<body ng-app='app'>
    <div ng-controller="parent">
        Parent: {{mydata}}
        <input type="text" ng-model="mydata">
        <button ng-click="sendData()">点击数据</button>
        <div ng-controller="child">
            {{change}} Child: {{child}}
        </div>
    </div>
 <script>
    angular.module("app", [])
    .controller("child", function($scope) {
        $scope.$on("parentChange", function(e, m) { //获取传过来的值
            console.log(e,"元素")
            console.log(m,"数据值")
            $scope.change = "changed";
            $scope.child = m;
        })
    })
    .controller("parent", function($scope) {
        // $scope.$watch("mydata", function(n, o) {
        //     console.log(n,"新值")
        //     console.log(o,"旧值")
        //     if (n == o) {
        //         return;
        //     }
        $scope.mydata="初始化值"; 
         $scope.sendData=function(){ //$scope.$broadcast必须在一个事件中才有效果。
            $scope.$broadcast("parentChange", $scope.mydata) //上级向下级传值
         }
          
       // })
    })
    </script>
</body>
</html>

  效果图

未点击前

 

 点击后

 

 

 

复制代码
<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>
  <meta charset="utf-8" />
  <script src="https://cdn.bootcss.com/angular.js/1.7.0/angular.min.js"></script>
  <script>
    var myApp = angular.module("myApp", []);
    //控制器Parent
    myApp.controller("Parent", function ($scope, $window) {
        $scope.topData = "我是顶级";
      $scope.name = "Parent";
      //$on用于事件
      $scope.$on("FromSelf", function (event, data) {
         $scope.topData=data.description+'-----FromSelf';
        $window.alert("当前节点" + event.currentScope.name + ",截获到了来自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description + event.targetScope.name);
      }); 
      $scope.$on("FromChild", function (event, data) {
        $scope.topData=data.description+'-----FromChild';
        $window.alert("当前节点" + event.currentScope.name + ",截获到了来自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
      });
 
    });
    //控制器Self
    myApp.controller("Self", function ($scope,$window) {

        $scope.middleData="我是中间数据";
      //button的传播事件
      $scope.toParent = function () {
        //注册一个向上传播的事件,eventName:'FromSelf', data:oneObject
        $scope.$emit("FromSelf", { divName: "Self", description: "向父传播数据" });
      };
      $scope.toChild = function () {
        //注册一个向下传播的事件,eventName:'FromSelf', data:oneObject
        $scope.$broadcast("FromSelf", { divName: "Self", description: "向子传播数据" });
      };
      $scope.name = "Self";
      $scope.$on("FromChild", function (event, data) {
        $scope.middleData="我是中间数据:"+data.description+'-----FromChild';
        $window.alert("当前节点" + event.currentScope.name + "截获到了来自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
      });
    });
    //控制器Child
    myApp.controller("Child", function ($scope, $window) {
      $scope.name = "Child";
      $scope.lastName="我是最里面的";
      //$on用于截获来自父级作用域的事件
      $scope.$on("FromSelf", function (event, data) {
        $scope.lastName = "我是最里面的:"+data.description+'-----FromSelf';
        $window.alert("当前节点" + event.currentScope.name +"截获到了来自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
      });
       
      //button的传播事件
      $scope.toTop = function () {
        //注册一个向上传播的事件,eventName:'FromChild', data:oneObject
        $scope.$emit("FromChild", { divName: "Child", description: "向上播数据" });
      };
 
    });
  </script>
 
</head>
<body>
  <form name="test"> 
  <div ng-controller="Parent">
    这里是父级Div
    <br>
    {{topData}}
    <hr>
    <div ng-controller="Self">
      这里是子级SelfDiv
      <hr>
      {{middleData}}
      <input type="button" ng-click="toParent()" value="向ParentDiv传播事件" />
      <input type="button" ng-click="toChild()" value="向ChildDiv传播事件" />
      <hr>
      <div ng-controller="Child">
       这里是子级ChildDiv <br>
       {{lastName}}
        <input type="button" ng-click="toTop()" value="向上传播事件" />
      </div>
    </div> 
    <hr>
    <div ng-controller="Brother"> 
      这里是Self的兄弟BrotherDiv
    </div> 
  </div>
  </form>
</body> 
</html>
复制代码

效果图

 

 

参考:https://blog.csdn.net/chpllp/article/details/91969194

posted @   剧里局外  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2020-10-31 vue中使用echarts图表功能,点击事件改变父级div窗体大小,echarts图表展示也跟着改变
点击右上角即可分享
微信分享提示