文件层级

index.html

<!DOCTYPE html>
<html ng-app="nickApp">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>angular之$broadcast、$emit、$on传值</title>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="http://apps.bdimg.com/libs/angular-ui-router/0.2.15/angular-ui-router.min.js"></script>
<script src="js/route.js"></script>
<script src="js/app.js"></script>
<script src="js/service/PublicDataService.js"></script>
</head>
<body ng-controller="bodyCtl"> <button ng-click="goHome()">go home</button>
<button ng-click="goMain()">$state go main</button>
<a ui-sref="main({paramsData:'ui-sref'})">ui-sref go main</a>
<div ui-view></div> <h2>$emit $broadcast $on</h2> <div ng-controller="ParentCtrl"> <!--父级-->
<div ng-controller="SelfCtrl"> <!--自己-->
<button class="btn" ng-click="click()">click me</button>
<div ng-controller="ChildCtrl"></div> <!--子级-->
</div>
<div ng-controller="BroCtrl"></div> <!--平级-->
</div> </body>
</html>

templates - home.html

<h2>home</h2>
<button ng-click="goMain()">$state go main</button>

templates - main.html

<h2>main</h2>

js - route.js

var nickApp = angular.module('nickApp', ['ui.router'])
.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/home'); $stateProvider
.state('home', {
url: '/home',
templateUrl: 'templates/home.html',
controller: 'HomeCtl',
//params: {paramsData: null}
navButtons:[] //自定义一些参数 在controll通过$state.get('home')得到对象
}) .state('main', {
url: '/main',
templateUrl: 'templates/main.html',
controller: 'MainCtl',
params: {paramsData: null} //目标页面定义接收的参数prameData
}) }])

js - app.js

nickApp
.controller('bodyCtl', ['$state', '$scope', function ($state, $scope) {
$scope.goMain = function () {
$state.go('main', {paramsData: 'body go main'});//传参时参数一致prameData--目标页路由配置params:{paramsData: null}
}; $scope.goHome = function () {
$state.go('home', {paramsData: 'home page'});//目标页路由未配置params则$stateParams 为空
}; $scope.data = 'body data'; console.log($scope.data); console.log($scope.homeData);//父无法用子scope homeData 使用方法传值接收 $on $emit $broadcast }]) .controller('HomeCtl', ['$scope', '$state', '$stateParams', function ($scope, $state, $stateParams) {
$scope.goMain = function () {
$state.go('main', {param: 'home go main'});//不一致 $stateParams 接收不到则为目标页面定义接收的参数{paramsData: null}
}; console.log($stateParams); console.log($scope.data);//子用父scope data $scope.homeData = 'home data';
console.log($scope.homeData); console.log($state.get('home'));
console.log($state.get('main')); }]) .controller('MainCtl', ['$scope', '$stateParams', function ($scope, $stateParams) { console.log($stateParams); console.log($scope.data);//子用父scope data }]) //$emit 子向父 controller 传 event、data -- $broadcast 父传子 -- $on 接收 .controller('SelfCtrl', ['$scope', 'PublicDataService', function ($scope, PublicDataService) {
$scope.click = function () {
$scope.$broadcast('to-child', 'to-child data'); //父传子
$scope.$emit('to-parent', 'to-parent data'); //子传父
}; $scope.publicData = PublicDataService.publicData;
console.log($scope.publicData);
}]) .controller('ParentCtrl', ['$scope', 'PublicDataService', function ($scope, PublicDataService) {
$scope.$on('to-parent', function (event, data) {
console.log('ParentCtrl--' + data); //父controller能得到传给父级值
});
$scope.$on('to-child', function (event, data) {
console.log('ParentCtrl--' + data); //父controller得不到传给子级值
}); $scope.publicData = PublicDataService.publicData;
console.log($scope.publicData);
}]) .controller('ChildCtrl', ['$scope', 'PublicDataService', function ($scope, PublicDataService) {
$scope.$on('to-child', function (event, data) {
console.log('ChildCtrl--' + data); //子controller能得到传给子级值
});
$scope.$on('to-parent', function (event, data) {
console.log('ChildCtrl--' + data); //子controller得不到传给父级值
}); $scope.publicData = PublicDataService.publicData;
console.log($scope.publicData);
}]) /*
平级得不到值 解决办法
*用上面的$state.go()
*或者定义一个公共服务 PublicDataService 注入 controller 就可以使用了
*或 在配置路由时自定义一些参数 在controll--HomeCtl通过$state.get('home')得到一个对象,它包含了配置home页的路由参数
*/ .controller('BroCtrl', ['$scope', 'PublicDataService', function ($scope, PublicDataService) {
$scope.$on('to-parent', function (event, data) {
console.log('BroCtrl', data); //平级得不到值
});
$scope.$on('to-child', function (event, data) {
console.log('BroCtrl', data); //平级得不到值
}); $scope.publicData = PublicDataService.publicData;
console.log($scope.publicData);
}])

js - service - PublicDataService.js

nickApp
.factory('PublicDataService', [function () {
var publicData = 'public service data'; return {
publicData: publicData
} }])

angular之$broadcast、$emit、$on传值的更多相关文章

  1. angular js $post,$get请求传值

    困扰了我好几天的问题!!! 刚开始学play框架,在向后台传值时,一直不成功! 当你用$POST传递一个参数时: HTML: <button ng-click=test()>测试</ ...

  2. angular学习笔记 父子组件传值

    一.如何将父组件的值传到子组件? 在子组件里面引入Input,然后用@Input 变量1 接收 接着在父组件中的,子组件标签上添加[msg]="msg",中括号里的名字要与子组件中 ...

  3. angular学习第1步

    #### 最专业,最全面的angular的学习文档 https://www.jianshu.com/p/f0f81a63cbcb ### https://www.cnblogs.com/xiaowei ...

  4. js 本地存储 localStorage 之 angular

    今天项目中用到 php yii框架 用的不是 angular路由 所以用rootScope传值是不行的 我就用到了 localStorage 本地持久化存储 如下 set 顾名思义是设置 值 loca ...

  5. AngularJS之ng-options的best practise

    废话不多说,直接上代码. function MySelectCtrl($scope) { $scope.Model = [ { id: 10002, MainCategory: '男', Produc ...

  6. 一步一步学Vue(三)

    接上篇,有同事看了我写的博客,觉得我这人不靠谱,文笔太白了,不够严肃,所以这次我一定要做一个严肃的人,写博客要有写博客的态度,第三篇开始我在考虑一个问题,会不会太着急了,要知道Vue的组件化时它的一个 ...

  7. Angular 父子组件传值

    Angular 父子组件传值 @Input  @Output  @ViewChild 新建一个头部组件 newsheader 在主组件引用 news 组件,在news组件添加 newsheader 组 ...

  8. Angular中父子组件双向绑定传值

    下面为大家展示一个较为简单的ng父子组件双向绑定传值,下面是父组件页面 这个页面的大概功能就是父组件(红色)通过输入框输入内容反映到子组件上进行展示,并且进行了投影, 子组件(橙黄色)通过Input输 ...

  9. angular之$on、$emit、$broadcast

    1.$scope.$on view事件 //View被加载但是DOM树构建之前时: $scope.$on('$viewContentLoading', function(event, viewConf ...

随机推荐

  1. windows系统安装erlang

    1.什么是erlang erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境.Erlang是一个结构 ...

  2. ListView 中的TextView实现跑马灯效果

    案例:怎么样在一个ListView中含有TextView的item中实现字母滚动呢.这个在一些特定的场合经常用得到.如下图,当焦点位于某个item的时候其内容就自动滚动显示 要实现这样的效果,废话不多 ...

  3. Android 配置文件 AndroidManifest 解析

    1.屏幕分辨率 <supports-screens android:smallScreens="true" android:normalScreens="true& ...

  4. 字符型设备驱动程序-first-printf以及点亮LED灯(二)

    编译这几个函数之前要学一下:Linux 的几个操作命令. 学习地址:http://edu.51cto.com/lesson/id-101824.html 重要的命令 有4个 :分别是 1.lsmod, ...

  5. POJ 3762 The Bonus Salary!(最小K覆盖)

    POJ 3762 The Bonus Salary! 题目链接 题意:给定一些任务.每一个任务有一个时间,有k天.一个时间仅仅能运行一个任务,每一个任务有一个价值.问怎么安排能得到最多价值 思路:典型 ...

  6. Python 学习笔记(十四)Python类(三)

    完善类的内容 示例: #! /usr/bin/env python # coding =utf-8 #通常类名首字母大写 class Person(object): """ ...

  7. objc单例的两种安全实现方案

    所有转出博客园,请您注明出处:http://www.cnblogs.com/xiaobajiu/p/4122034.html objc的单例的两种安全实现方案 首先应该知道单例的实现有两大类,一个是懒 ...

  8. C# 反射 Reflection Assembly

    本章节带来的是反射,反射反射程序员的快乐. 一.什么叫反射 反射:是.net Framework提供给的一个方面metadata的帮助类,可以获取信息并且使用 反射的有点:动态 反射的缺点:1:稍微麻 ...

  9. HCDA day1

    OSI有几层: OSI将计算机网络体系结构(architecture)划分为以下七层: 图1.OSI模型 物理层: 将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人. 物理层(Phys ...

  10. kafka搭建到配置borker集群(项目开发-区块链)

    (以下分享了搭建kafka需要使用到的命令,差不多齐了,这里没有提到kafka-manager ,同学可以在网上自行查找) 最近公司的项目比较紧,先说下使用kafka的用处: 要替代原来 撮合引擎发数 ...