在 KnockoutJS 应用程序中将 AngularJS 应用程序作为 iFrame 加载
Loading AngularJS app within KnockoutJS app as iFrame
我需要将已经开发的AngualarJS网络应用程序显示到另一个使用KnockoutJS和JQuery开发的Web应用程序中。使用纯KNOCKOUTJS模板技术开发的父应用程序。我对此进行了一些调查,发现iFrame是实现这一目标的一种方法(不知道它是否正确)。我做了一个原型,我在iFrame中加载了AngularJs应用程序,该应用程序被声明为父应用程序的模板文件。在原型级别,它工作正常。但是,我在这里面临一些问题a) 我必须在所有父(KnockoutJS应用程序)模板文件中声明iFrame。b) iFrame 和父网页/应用程序(两个应用程序将位于同一域中)之间的通信看起来有点复杂且不可靠。
谁能建议我一些更好的方法来实现这一目标?
谢谢生物制品管理系统
实际上,ko可以很好地玩棱角。在这个小提琴中,我们将角度和 ko 应用于同一页面,ko 控制 dom 的一部分,而角度控制另一部分。他们也可以互相交谈。
唯一特别的是自定义绑定,它告诉 ko 不要控制属于 angular 的 dom 分支。使用这种方法,您不需要 iframe。但可能您仍然需要更改 ko 模板。我不太了解角度,所以角度代码可能非常糟糕。
.html:
<div>
<div>message for angular:<input type="text" data-bind="value:data"/>
<button data-bind="click:sendDataToAng">send message to angular</button>
</div>
<span data-bind="text:externalMessage"></span>
</div>
<div data-bind="noControl:{}">
<div >
<hr />
<div>--------------Angular section, everything outside horizontal lines is controlled by ko------------</div>
<div ng-app="" >
<div ng-controller="ngvm.Cntl" id="angularContainer" >
message for ko: <input type="text" ng-model="data" />
<button type='button' ng-click="sendToKO()"> send message to ko </button>
<div ng-bind="externalMessage"></div>
</div>
</div>
<hr />
</div>
</div>
someValue: <input data-bind="value:someValue, valueUpdate:'afterkeydown'" />
<div data-bind="text:someValue">
</div>
js, nowrap -- 在 head, for angular to work:
var ngvm = {
Cntl: function($scope) {
$scope.data = '';
$scope.sendToKO = function(){
console.log($scope.data);
kovm.externalMessage("message from angular: " + $scope.data);
}
$scope.externalMessage = "no extsdfernal messages";
$scope.$watch('externalMessage', function(newValue, oldValue) {
console.log(newValue);
});
}
}
$(function(){
var KOCtor = function(){
var self = this;
self.externalMessage = ko.observable("no external messages");
self.data = ko.observable();
self.sendDataToAng = function(){
var $scope = angular.element($("#angularContainer")[0]).scope();
$scope.$apply(function(){
$scope.externalMessage = "message from ko: " + self.data();
});
$scope.$digest();
}
self.someValue = ko.observable("koko");
}
ko.bindingHandlers.noControl = {
init:function(element, valueAccessor, allBindings, viewModel, bindingContext){
return { controlsDescendantBindings: true };
},
update:function(element, valueAccessor, allBindings, viewModel, bindingContext){
}
}
window.kovm = new KOCtor();
ko.applyBindings(window.kovm);
})
相关文章:
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- Protractor:在Iframe中测试非角度应用程序
- 在移动应用程序上滚动iframe会在某个时刻跳到页面顶部
- IFRAME和谷歌应用程序脚本中的NATIVE模式
- iframe响应为302时重新加载应用程序
- IFRAME沙盒中的Google OAuth2和应用程序脚本
- 如何记录Apache Cordova应用程序中加载的iframe的http响应
- 在asp.net mvc应用程序中的iframe中呈现部分视图
- 正在Iframe中打开Express应用程序
- iFrame - 在 Web 应用程序中实现 Iframe 的成本
- 为什么IE不支持在现有应用程序中使用的iFrame js和css文件
- 在 KnockoutJS 应用程序中将 AngularJS 应用程序作为 iFrame 加载
- 如何定位“隐藏”的 iframe?(应用程序:链接到嵌入“隐藏的海报图像”嵌入的 Youtube 视频的起始位置)
- FB.ui在我的应用程序iFrame中渲染iFrame
- 从应用程序iframe中刷新Facebook页面
- 修复了移动应用程序iframe中的底部页脚
- Windows 8应用程序iframe尝试访问内网页面内容
- Javascript重定向在Facebook应用程序iframe
- Facebook应用程序iframe中的Javascript重定向
- Facebook应用程序iframe在safari上登录问题