项目中有跨window的相互交互的场景,不适合用模态窗口做。通过指令很容易满足该需求。
具体思路:在window1的一个element上使用jquery的事件绑定,在指令里回调scope的属性或方法。
window2就在需要回调的方法里去触发window1的element的事件。
具体实现代码如下:
define(function(require){ var moduleName = 'ng.ext.trigger-bridge'; return { init: function(){ window.console.log('Begin init module ' + moduleName); if(angular.isModuleExists && angular.isModuleExists(moduleName)){ window.console.log('Module already exists!' + moduleName); return; } var md = angular.module(moduleName, []); md.factory('extTriggerBridgeService', function(){ return { trigger: function(el, type, field, data){ el.trigger(type || 'scopeChange', [field, data]); }, triggerInWindow: function(win, elementId, type, field, data){ // cross window, use jquery not jqLite in global if(win && win.$){ var elDom = win.document.getElementById(elementId); win.$(elDom).trigger(type || 'scopeChange', [field, data]); } } }; }); // *** *** *** *** *** *** *** *** *** *** // *** *** *** *** *** *** *** *** *** *** md.directive('extTriggerBridge', ['$parse', function($parse){ 'use strict'; return { restrict: 'A', // begin link *** link: function(scope, el, attrs, ctrl){ var opts = scope.$eval(attrs.extTriggerBridge) || {}; console.log('Init extTriggerBridge - ' + JSON.stringify(opts)); el.bind(opts.eventType || 'scopeChange', function(e, field, data){ console.log('Trigger : ' + JSON.stringify(opts) + ' - ' + field + ' - ' + JSON.stringify(data)); if(opts.setData){ // set data if(data){ var getter = $parse(field); var setter = getter.assign; var oldVal = getter(scope) || {}; angular.extend(oldVal, data); scope.$apply(function(){ setter(scope, oldVal); }); } }else if(opts.callFn){ // call function var fnTarget = $parse(field)(scope); if(!fnTarget || !angular.isFunction(fnTarget)){ console.log('No function defined : ' + field); }else{ scope.$apply(function(){ fnTarget(data); }); } }else{ // emit event var eventName = field; scope.$apply(function(){ scope.$emit(eventName, data); }); } }); } // end link *** }; // end link }]); // end directive } // end init }; });
相关推荐
下面的代码展示了如何使用AngularJS和$window服务来监听窗口大小变化并执行相应操作: ```html <!DOCTYPE html> <title>Title <script src="angular.js"></script> var app = angular.module('myApp', [])...
angularjs中controller其实就是一个方法,它有三种写法,下面来一起看看吧。 第一种: <pre name=code class=javascript>var AppController = ['$scope', function($scope){ $scope.notifyServiceOnChage = ...
├最新AngularJS开发宝典—第063讲 $window服务的实例讲解.mp4 ├最新AngularJS开发宝典—第064讲 $sce服务安全的处理html数据.mp4 ├最新AngularJS开发宝典—第065讲 $cacheFactory的缓存实例讲解.mp4 ├最新...
JavaScript bom操作 window对象的方法 示例代码JavaScript bom操作 window对象的方法 示例代码JavaScript bom操作 window对象的方法 示例代码JavaScript bom操作 window对象的方法 示例代码JavaScript bom操作 ...
这种交互被称为“WebBrowser_js与托管代码互操作”,它允许用户在浏览器控件内执行本地应用程序的功能,或者反之,让本地应用对网页进行操作。下面将详细介绍这一主题,包括原理、实现方法以及相关的技术要点。 1. ...
在JavaScript中,所有的全局变量和函数都是window对象的属性和方法。本篇将详细阐述window对象的一些常用方法及其作用。 1. **open方法** `window.open(URL, 窗口名称, 窗口风格)` 用于打开新的浏览器窗口。`URL`...
AngularJS通过它的内置服务$injector,能够自动注入$scope、$location、$window以及其他自定义的Service。依赖注入机制主要用在controller和factory中。依赖注入不仅减少了代码的耦合性,还提高了模块的复用性。 ...
这是一个专门为AngularJS设计的百度地图指令集,它允许开发者轻松地在AngularJS应用中嵌入和操作百度地图。下面将详细介绍其核心概念、使用方法以及示例。 **1. 安装与引入** 首先,你需要通过npm或者GitHub下载...
AngularJS postMessage API 允许angularJS通过 API侦听和发布跨文档消息。 跨文档消息传递与以下浏览器兼容,如“: Internet Explorer 8+ Firefox 3+ Chrome4+ Safari 4+ Opera 9.5+ iOS Safari 3.2以上版本Opera ...
在JavaScript中,对象的方法是可以被替换的,因此我们可以在全局作用域内定义一个新的`alert`函数,让它执行我们自定义的操作。以下是一个简单的例子: ```javascript (function() { var originalAlert = window....
app.controller('FormController', function($scope, $window) { var formElement = angular.element(document.querySelector('form')); var handleScroll = function() { $scope.isFixed = $window....
因此,在封装过程中应尽可能减少DOM操作,使用AngularJS提供的原生服务和指令,以提高应用的性能和可维护性。 总结,AngularJS封装jQuery Datepicker是将两者的优势结合,利用AngularJS的双向数据绑定和指令系统,...
根据提供的文件信息,这是一篇关于JavaScript中的window对象及其方法的文档。window对象是Web浏览器中的一个全局对象,它代表了浏览器窗口本身,是JavaScript中的最顶级对象。以下是关于window对象及其相关方法的...
这里面包含了window的所有方法和属性的基本用法,特别适合初学者学习bom
这些方法和属性为AngularJS提供了丰富的功能,如元素操作、数据处理等。自执行函数中还包含一个循环,用以遍历angular全局对象的所有属性,并输出它们的类型和值。通过输出可以发现,除了两个属性之外,其余的都是...
Window对象在Web开发中扮演着至关重要的角色,它是JavaScript中全局对象的一个实例,几乎所有的其他...通过结合其他JavaScript技术,如DOM操作、AJAX通信等,Window对象能够成为构建强大交互式Web应用的强大工具。
window.open使用方法以及参数说明一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二、基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口...
本文将详细介绍两种在AngularJS中实现页面自适应高度的方法。 ### 方法一:使用自定义指令(autoHeight) 自定义`autoHeight`指令是通过在UI-Router的`ui-view`所在的`div`元素上添加该指令来实现的。首先,我们需要...