外挂式插件编程思路【进阶篇】(5)

野生程序猿-杂烧3年前案例分享881

继续深造angular.js,并加入jquery.js

<!-- 空html,等待html插入 -->
<div id="tab_body"></div>

本网页模拟弱代码、无代码模式后端自动生成的html

【demo.html】

<!DOCTYPE html>
<html ng-app="myApp"  ng-controller="myhtml">
	<head>
		<meta charset="utf-8" />
		<title>外挂式插件编程思路(进阶)</title>
		<script src="jquery.min.js"></script>
		<script src="angular.min.js"></script>
		<script src="app.js"></script>
		<style>
			
			dt {
				border: 1px rgba(0,0,0,0.05) solid; border-bottom:0;
				list-style: none; margin: 0;
				background: rgba(0,0,0,0.02);
				border-radius: 8px 8px 0px 0px;
				overflow: hidden;
			}
			dd {
				border: 1px rgba(0,0,0,0.05) solid;  border-top:0;
				list-style: none; margin: 0;
				padding: 10px 10px 10px 10px;
				border-radius:0px 0px 8px 8px;
			}
			dt span { 
				background: rgba(0,0,0,0.03);
				display: inline-block; height: 40px; line-height: 40px; padding: 0px 20px 0px 20px;
				cursor: pointer;
				border-left: 1px rgba(0,0,0,0.05) solid;
				
			}
			dt span:nth-child(1) {border-left:0px;}
			dt span.active {
				background:#ff0000;
				color:#fff; font-weight: bold;
				
			}
		</style>
	</head>
	<body>
		<!-- 空html,等待html插入 -->
		<div id="tab_body"></div>
			
		<script>
			//本网页模拟弱代码、无代码模式后端自动生成的html
			//加载tab html
			function load_tab_html()
			{
				let tab_html=`
					<h1>模拟tab切换</h1>
					<dl>
						<dt><span class="{{$index==tab.active_index ? 'active':''}}" ng-repeat="x in tab.list" ng-click="tab.change($index)">{{x.title}}</span></dt>
						<dd>{{tab.list[tab.active_index].content}}</dd>
					</dl>
				`;
				$("#tab_body").html(app.html(tab_html));
			}

			var app=ng_app();
			app.init(function()
			{
				//tab标签相关
				app.$scope.tab={
					active_index:0,
					list:[
						{title:'首页',content:'首页内容'},
						{title:'新闻',content:'新闻列表'},
						{title:'产品',content:'产品列表'},
					],
					change:function(index){
						console.log('change',index);
						if(app.$scope.tab.active_index!=index) app.$scope.tab.active_index=index;
					}
				};
				
				load_tab_html();
				app.update();//页面渲染
			});
		</script>
		
	</body>
</html>

【app.js】

function ng_app()
{
	var MyApp=
	{
		init:function(back)
		{
			console.log('init');
			var me=this;
			var app = angular.module('myApp',[]);
			app.controller("myhtml",function($scope, $http,$window,$compile)
			{
				me.$scope=$scope;
				me.$http=$http;
				me.$window=$window;
				me.$compile=$compile;
				back();
			});
		}
		
		//更新模板渲染 优化ng频繁更新有报错,这里加1毫秒延迟 避免报错
		,update:function(){
			var me=this;
			setTimeout(function(){
				try{
					me.$scope.$apply();
				}catch(e){}
			},1);
		},
		//配合jq使用,jq后的模板,重新渲染
		html:function(html)
		{
			var that=this;
			try{
				var result=that.$compile(html)(that.$scope);
				if(result.selector)//假设存在 this_tpl_new.selector 则认为ng变量不存在失败了
				{
					//console.error(this_tpl_new.selector);
					var result=html;
				}
			}catch(e){
				var result=html;
			}
			return result;
			
		},
		new:function(){
			return this;
		}
		
	}
	var result=MyApp.new();
	return result;
};

功能正常

image.png

标签: 外挂式编程

相关文章

外挂式插件编程思路【敏捷框架篇】(10)

外挂式插件编程思路【敏捷框架篇】(10)

优化细节,标签多个效果。如select正常得到的是value值,但是我们实际要在其他地方显示value对应的文字。【index.html】<!DOCTYPE html> <...

外挂式插件编程思路【总结篇】(14)

先前讲解了外挂式的思维,以及用外挂式的思维开发框架,这里做个总结。1、内插、外插的思维。很多时候我们代码this是乱的,库里面可以用$this代表插进来的this。(参照先前的ZaShao.js)2、...

外挂式插件编程思路【敏捷框架篇】(11)

外挂式插件编程思路【敏捷框架篇】(11)

修复bug,mvvm框架主要是善于数据,虚拟dom,与实际的dom比,监听能力差很多。这里有个bug,select下拉选项点开后,需要点其他地方关闭。如果jq,其他的点击事件很好监听。这里不用jq,用...

外挂式插件编程思路【敏捷框架篇】(13)

外挂式插件编程思路【敏捷框架篇】(13)

zhaoshao.alert支持zs-select,结合才是一个相对复杂的应用场景。【index.html】<!DOCTYPE html> <html ng-a...

外挂式插件编程思路【基础篇】(2)

外挂式插件编程思路【基础篇】(2)

* 本网页 讲解外挂插法,外插(内部的东西插到外部使用)。* 内部的代码几乎不变的情况下, 通过插入外部的个别方法,达到控制内部的目的* 特征,主要代码是写外部逻辑。内部尽可能的不动、少动【demo....

外挂式插件编程思路【进阶篇】(4)

外挂式插件编程思路【进阶篇】(4)

外挂式编程结合angular.js【demo.html】<!DOCTYPE html> <html ng-app="myApp" ...