angularjs apply方法

不废话,直接上代码,请搜索 apply 为什需要在标准服务上掉呢。。。。


var app = angular.module('MyApp', ['ngResource','ngRoute','ngGrid']).config(function ($routeProvider) {
    $routeProvider
      .when('/store', {
        templateUrl: 'page/store.html',
        controller: ''
      })
      .when('/schema', {
        templateUrl: 'page/schema.html',
        controller: ''
      })
      .when('/storeinfo', {
        templateUrl: 'page/storeinfo.html',
        controller: ''
      })
  });

var spacename ='';

app.controller('storeManage', function ($scope) {  

  $scope.storeView = true;
  $scope.schemaView = false;    
  $scope.space = {name:"spaces",realname:""};
  $scope.spaces = spaceModel;

  $scope.$on("storeChange",
    function (event, treeNode) {
       $scope.storeView = true;
       $scope.schemaView = false;   
       $scope.$broadcast("storeChangeFromParent", treeNode);
    });

  $scope.$on("schemaChange",
    function(event,treeNode){
        $scope.storeView = false;
        $scope.schemaView = true;
        $scope.$broadcast("schemaChangeFromParent",treeNode);
    });

  $scope.selectSpace=function(){
    $("#spacemodal").modal();
  }

  $scope.saveSpace = function(){
    $scope.space = $scope.tempSpace; 
    spacename = $scope.space.name;
  }

  $scope.cancelSpace = function(){
    $scope.tempSpace = {};
  }

});

app.controller('storeTreeController', function ($scope) {

});

app.controller('storeEdit',function($scope,$http,storeInstance,setMetaInstance,smeDeploySet,smeCreateSet,spaceSchema,StatusesConstant){

    console.log("store controller init..........");

 	$scope.store = storeModel;	
 	$scope.indexInfo = indexModel;
 	$scope.set = setModel;
 	$scope.listElement = listElementModel;
 	$scope.spaceSchemaList = spaceSchemaListModel;
 	$scope.isBaseSchema = false;

   $scope.createStore = false;
   $scope.createSetMeta = false;
 

  $scope.firstShow = true;
  $scope.secondShow = false;

  console.log("show initial...............");

  $scope.title = "查看数据集";

  $scope.statuses = StatusesConstant;

 	$("#schematree").hide();
 	$("#storetree").show();

  $("#storePanel").show();
  $("#schemaPanel").hide();

  $scope.$on("storeChangeFromParent", function (event, treeNode) {
	 if(treeNode.isParent == true){

        $scope.title = "查看store";
        $scope.firstShow = true;
        $scope.secondShow = false;
        $("#storePanel").show();
        $("#schemaPanel").hide();



        $scope.store = createStoreModel();
        $scope.set = createSetModel();

        $scope.$apply(
          storeInstance.get({setName:treeNode.name}).$promise.then(
            function(resolve){
              $scope.store = resolve;

              if(typeof($scope.store.entitySetName) == "undefined"){
                  alert("获取store出错");
              }else{
                  setMetaInstance.get({setMetaName:treeNode.name}).$promise.then(
                        function(resolve){
                         $scope.set = resolve;
                          if(typeof($scope.set.setName)=="undefined"){
                               $scope.set = createSetModel();
                               $scope.set.setName = $scope.store.entitySetName;
                               $scope.createSetMeta = true;
                           }
                       },
                   function(reject){console.log("get SetMetadata failed"+reject)}
                  );
              }
            },
            function(reject){console.log("get store failed")}
          ));

        $scope.set.appSpaceId = $scope.space.realname;


        $(".store_info").each(function(){
            this.disabled = true;
        });
       }
    });

    $scope.createStore = function(){
        $scope.store = createStoreModel();
        $scope.set = createSetModel();

        $scope.store.appSpaceId = $scope.space.realname;
        $scope.store.entitySetName = $scope.space.realname+".";

        $("input,select,textarea").each(function(){
             this.disabled = false;
     });
        $scope.gridOptions.enableCellEdit = true;

        $scope.isCreate = true;

        $scope.firstShow = false;
        $scope.secondShow = true;

        $scope.title = "创建store";
    }

    $scope.cancelStore = function(){
       $scope.firstShow = true;
       $scope.secondShow = false;

       $(".store_info").each(function(){
          this.disabled = true;
       });
       $scope.title = "查看store";

    }

   $scope.createStoreTable = function(){
      smeDeploySet.deploy(
        {spaceName:$scope.space.realname},
        function(data){
            console.log("deploy success");  
        },
        function(){
          console.log("deploy failed");
        });
    }


    $scope.editStore = function(){
      if($scope.store.entitySetName == ''){
        alert("请先选择一个store");
        return;
      }

    	$(".ex_store_info").each(function(){
    		this.disabled = false;
    	});
      $scope.isCreate = false;
      $scope.firstShow = false;
      $scope.secondShow = true;
      $scope.title = "编辑store";



      $scope.firstShow = false;
      $scope.secondShow = true;

      $scope.gridOptions.enableCellEdit = true;
      if($scope.set.entitySchemaList.length ==0){
        $scope.createSetMeta = true;
      }
    };

	$scope.saveStore = function(){  

      $scope.set.setName = $scope.store.entitySetName;
      $scope.set.appSpaceId = $scope.space.realname;

    if($scope.isCreate == true){
      smeCreateSet.save({setName:$scope.store.entitySetName},$scope.store)
      if(typeof($scope.set.entitySchemaList)!="undefined" && $scope.set.entitySchemaList.length > 0){
          setMetaInstance.put({setMetaName:$scope.set.setName},$scope.set)
         }
    }
    else{
      storeInstance.save({setName:$scope.store.entitySetName},$scope.store);
      if(typeof($scope.set.entitySchemaList)!="undefined" && $scope.set.entitySchemaList.length > 0 ){

          if($scope.createSetMeta == true){
           setMetaInstance.put({setMetaName:$scope.set.setName},$scope.set);
           $scope.createSetMeta = false;
          }else
           setMetaInstance.save({setMetaName:$scope.set.setName},$scope.set);
      }
    } 

     $scope.firstShow = true;
     $scope.secondShow = false;

     $scope.createSetMeta = false;

    $(".store_info").each(function(){
        this.disabled = true;
    });

    $scope.title = "查看数据集";
	}

	$scope.createIndex = function(){
		$("#input_index").show();
	}

	$scope.quitIndex = function(){	
		$scope.indexInfo = '';
		$("#input_index").hide();
	}

	$scope.confirmIndex = function(){
		$scope.store.index.push($scope.indexInfo);
		$scope.indexInfo = null;
		$("#input_index").hide();
	}

	$scope.delIndex = function(index){
      $scope.store.index.splice(index,1);
    };

    $scope.createSchema = function(){
    	$("#input_schema").show();

    	var URL = "/MDE/DSE/EntitySchema?$filter=appSpace eq \'"+$scope.space.realname+"\'";
    	$http({
    		url:URL,
    		method:"GET"
    	}).success(function(data){
    		$scope.spaceSchemaList = data;
    	});
    }

    $scope.confirmSchema = function(){
    	var flag = true;
    	var tempList = $scope.set.entitySchemaList;
    	

      if(tempList.length > 1){
          for(var i=0;i<tempList.length;i++){
            if(tempList[i].schemaName == $scope.schemaName){
                flag = false;
                alert("schema already exist");
          }
        }
      }
    	
    	
    	if(flag==true){	


        if($scope.isBaseSchema == "true"){
           $scope.isBaseSchema = true;
        }else{
          $scope.isBaseSchema = false;
        }
    		$scope.set.entitySchemaList.push({
    			id: $scope.set.entitySchemaList.length+1,
    			schemaName : $scope.schemaName,
    			isBaseSchema:$scope.isBaseSchema
    		 }
    		);
	    	$("#input_schema").hide();  	
    	}
    	
    }

    $scope.quitSchema = function(){
    	$scope.listElement = null;
    	$("#input_schema").hide();
    }

    $scope.delSchema = function(index){
    	 $scope.set.entitySchemaList.splice(index,1);
    }

    $scope.pkeyTypes =dataTypeModel;
    $scope.storeTypes=storeTypeModel;

    $scope.markTypes = markTypeModel;
    $scope.indexTypes = dataTypeModel;

//    $scope.testData=[{col1:"fuck1",col2:"fuck2",col3:2,col4:"fuck4",col5:"fuck5"},
//                     {col1:"fuck12",col2:"fuck22",col3:1,col4:"fuck24",col5:"fuck25"}];

    $scope.editDFV = function(){
      console.log("edit dfv");
    }

    $scope.deleteDFV = function(row){
       $scope.store.defaultValues.remove(row.rowIndex);
    }



    $scope.selectCell ="<select ng-model='COL_FIELD' ng-class='\'colt\' + col.index'   ng-input='COL_FIELD' ng-options='id as name for (id, name) in statuses' ng-blur='updateEntity(row)'></select>";
    $scope.buttonCell = '<button  class="btn btn-link" ng-click="deleteDFV(row)" ng-show="secondShow">删除</button>';
    $scope.gridOptions = {
        data: 'store.defaultValues',
        enableCellEdit: true,
        columnDefs: [{field: "name",displayName:"名称"},
                     {field:"dType",displayName:"类型", editableCellTemplate: $scope.selectCell ,cellFilter: 'mapStatus'},
                     {field:"defaultValue",displayName:"默认值"},
                     {field:"evalExp",displayName:"表达式"},
                     {displayName:"操作",cellTemplate:$scope.buttonCell, enableCellEdit: false}
           ]
    };

    $scope.createDefaultValue = function(){
//         if(isNaN($scope.store.defaultValues))
         $scope.store.defaultValues.unshift({name:null,dType:1,defaultValue:null,evalExp:null});

    }

    $scope.updateEntity = function(row) {
       console.log("row",row);

     };

     $scope.displayDefaultValue= function(row){
         console.log($scope.store.defaultValues);
     }
});

app.directive('ngBlur', function () {
      return function (scope, elem, attrs) {
        elem.bind('blur', function () {
          scope.$apply(attrs.ngBlur);
        });
      };
    });

app.filter('mapStatus', function( StatusesConstant ) {
     return function(input) {
       if (StatusesConstant[input]) {
         return StatusesConstant[input];
       } else {
         return 'unknown';
       }
     };
   })

app.factory( 'StatusesConstant', function() {
      return {
        1: 'preset',
        2: 'evaljs'
      };
    });


Array.prototype.remove=function(dx)
{
    if(isNaN(dx)||dx>this.length){return false;}
    for(var i=0,n=0;i<this.length;i++)
    {
        if(this[i]!=this[dx])
        {
            this[n++]=this[i]
        }
    }
    this.length-=1
}


app.factory('storeInstance',['$http','$resource',function($http,$resource){
	return $resource('/MDE/DSE/EntitySet(\':setName\')',
					  {setName:'@setName'},
					  {create:{method:'PUT'},params:{},isArray:false}
					) ;
}]);


app.factory('setMetaInstance',function($http,$resource){
	return $resource(
					  '/MDE/DSE/SetMetadata(\':setMetaName\')',
					  {setMetaName:'@setMetaName'},
	  				  { put:{method:"PUT"}, params:{},isArray: false}
	  				 )
});
	

 

 

html

 

	
     <div class="row">
         <div class="col-md-3">
		      <div class="zTreeDemoBackground left" ng-controller="storeTreeController">
		         <ul storetree id="treeDemo" class="ztree" showIcon="showIconForTree"></ul>
	          </div>
		 </div>

		
			<div ng-controller="storeEdit"  id="storePanel" ng-show="storeView">
				 <div class="col-md-6">
				 	<h4>{{title}}</h4>
				 	<div  class="panel panel-info" >
						<div class="panel-heading ">
			                  数据集管理 			  
						     <button type="button" class="btn btn-primary btn-sm" ng-click="createStore()" ng-show="firstShow">新增</button>	
						     <button type="button" class="btn btn-primary btn-sm" ng-click="editStore()" ng-show="firstShow" >修改</button>	
						    
						     <button type="button" class="btn btn-primary btn-sm" ng-click="saveStore()" ng-show="secondShow">保存</button>
						     <button type="button" class="btn btn-primary btn-sm" ng-click="cancelStore()" ng-show="secondShow" >取消</button>	   
						     <button type="button" class="btn btn-primary btn-sm"   ng-click="createStoreTable()" ng-show="firstShow">发布</button>

						    	  
						</div>

					    <div class="panel-body">	
					       <div class="panel panel-info">
							   <div class="panel-heading">
									  数据集基础信息
									
									 				  
								</div>
				          
						    
							   <div class="form-horizontal panel-body "    style="padding-top: 40px;">

							    <div class="form-group " role="form" >
									<label  class="col-md-2 control-label">数据集名称</label>
									<div class=" col-md-4">
									  
									  <input type="text" class="form-control store_info"  ng-model="store.entitySetName">
									</div>

									<label  class="col-md-2 control-label">AppSpaceId</label>
									<div class="col-md-4">
									  <input type="text" class="form-control store_info"  ng-model="store.appSpaceId">
									</div>
							    </div>		
							  
							   		 	
								
								 <div class="form-group">
								 	<label  class="col-md-2 control-label">主键</label>
									<div class="col-md-4">
									  <input type="text" class="form-control store_info ex_store_info"  ng-model="store.pKey">
									</div>


									<label  class="col-md-2 control-label">主键类型</label>
									<div class="col-md-4">
									       <select ng-model="store.pkeyType" ng-options="o.id as o.name  for o in pkeyTypes" class="form-control store_info ex_store_info">
						  						<option >-- 请选择 --</option>
						  					</select>
									</div>

								
							    </div>		
							  
							   
								  <div class="form-group">
									<label  class="col-md-2 control-label">存储类型</label>
									<div class="col-md-4">
									       <select ng-model="store._storageType" ng-options="o.id as o.name  for o in storeTypes" class="form-control store_info ex_store_info">
						  						<option >-- 请选择 --</option>
						  					</select>
									</div>
							    </div>	
								
								 <div class="form-group">
									<label  class="col-md-2 control-label">描述</label>
									<div class="col-md-4">
									  <textarea class="form-control store_info ex_store_info"   ng-model="store.description"></textarea>
									</div>
							    </div>	
						 </div> 

		         
						      <div class="panel panel-info"  style="padding-top: 20px;">
						      	   <div class="panel-heading">	
										 索引信息							 
										 <button type="button" class="btn btn-primary btn-sm" ng-click="createIndex()" ng-show="secondShow">新增索引</button>
									 
									</div><!-- panel-heading-->




								  <div class="panel-body"  >
								  	<table class="table display_table" >
								  		<col width="8%" />
				  						<col width="15%" />
							            <col width="10%" />
							            <col width="15%" />
							            <col width="20%" />
							            <col width="20%" />
							            <col width="15%" />

								  		<thead>
								  			<tr>
								  				<td>编号</td>
								  				<td>索引名称</td>
								  				<td>直接索引</td>
								  				<td>markType</td>
								  				<td>索引类型</td>
								  				<td>表达式</td>
								  				<td>&nbsp&nbsp&nbsp</td>
								  			</tr>
								  		</thead>
								  		<tbody>
								  			<tr id="input_index" style="display:none">
								  				<td>									  				  
								  				</td>
								  				<td ><div><input type="text" ng-model="indexInfo.path" ></input></div></td>

								  				<td ><div><input type="text" ng-model="indexInfo.direct" ></input></div></td>

								  				
								  				<td ><select ng-model="indexInfo.markType " ng-options="o.id as o.name  for o in markTypes"  >
						  						    <option ></option>
						  					        </select>
						  					    </td>
								  				<td > 
								  					<select ng-model="indexInfo.indexDataType" class="selectdatatype" ng-options="o.id as o.name  for o in indexTypes" >
						  						    <option ></option>
						  					        </select>
						  				        </td>


								  				<td ><input type="text" ng-model="indexInfo.expression" ></input></td>
								  				<td ><button type="button" class="btn btn-primary btn-sm"  
								  					  ng-click=" confirmIndex()">确认</button>
								  					<button type="button" class="btn btn-primary btn-sm" 
								  					  ng-click="quitIndex()">取消</button>
								  				</td>
								  			</tr>
								  			<tr ng-repeat="o in store.index">
								  				<td>{{$index+1}}</td>
								  				<td>{{o.path}}</td>
								  				<td>{{o.direct}}</td>
								  				<td ><select ng-model="o.markType" ng-options="o.id as o.name  for o in markTypes"  disabled="disabled">
						  						    <option ></option>
						  					        </select>
						  					    </td>
								  				<td > 
								  					<select ng-model="o.indexDataType"  class="selectdatatype"  ng-options="o.id as o.name  for o in indexTypes" disabled="disabled">
						  						    <option ></option>
						  					        </select>
						  				        </td>

								  			  
								  				<td>{{o.expression}}</td>
								  				<td>	
								  					<button type="button" class="btn btn-link btn-sm"  ng-show="secondShow" ng-click="delIndex($index)">删除</button>
								  				</td>	
								  			</tr>
								  		</tbody>
								    </table> 	
								  </div><!-- /.panel-body-->



							 </div><!--panel-->

                             <div class="panel panel-info" style="padding-top: 20px;" >
                                 <div class="panel-heading">
                                     默认值信息
                                     <button type="button" class="btn btn-primary btn-sm" ng-click="createDefaultValue()" ng-show="secondShow">新增默认值</button>

                                 </div>
                                 <div>


                                 </div>
                                 <div class="panel-body">
                                     <div class="gridStyle" ng-grid="gridOptions"></div>
                                 </div>

                             </div>
		              
						     </div>
					    </div>
				    </div><!--mid-panel-->
				  </div> <!--col-md-6-->
					
  				<div class="col-md-3"  ng-show="storeView">
				    <div class="panel panel-info"  >
		  				<div class="panel-heading">
		  					所含Schema
		  					 <button type="button" class="btn btn-primary btn-sm" ng-click="createSchema()" ng-show="secondShow">添加Schema</button>		
		  				</div>
		  				<div class="panel-body">
		  					<table class="table display_table">
		  						<col width="10%" />
		  						<col width="50%" />
					            <col width="20%" />
					            <col width="20%" />

						  		<thead>
						  			<tr>	
						  			    <td>&nbsp</td>			
						  				<td>schema名称</td>	
						  				<td>baseSchema</td>
						  				<td>&nbsp&nbsp&nbsp</td>		  				
						  			</tr>
						  		</thead>
						  		
						  			<tr id="input_schema" style="display:none">
						  				<td></td>
						  				<td >
						  					<select class="selectdatatype" ng-model="schemaName" >
						  						<option ng-repeat = "o in spaceSchemaList">{{o.id}}</option>
						  					</select>

						  				</td>
						  				<td>
						  					<select ng-model="isBaseSchema">
						  						<option  value="true">是</option>
						  						<option  value="false">否</option>
						  					</select>


						  				</td>
						  				<td ><button type="button" class="btn btn-link"  
						  					  ng-click=" confirmSchema()">确认</button>
						  					<button type="button" class="btn btn-link" 
						  					  ng-click="quitSchema()">取消</button>
						  				</td>
								  	</tr>
						  			<tr ng-repeat="o in set.entitySchemaList">	
						  				<td>{{$index+1}}</td>
						  				<td>{{o.schemaName}}</td>	
						  				<td>{{o.isBaseSchema}}</td>
						  				<td>
						  					<button type="button" class="btn btn-link"  ng-click="delSchema($index)" ng-show="secondShow">删除</button>
						  				</td>	  				
						  			</tr>
						  		
						    </table>

		  				</div>
				    </div>
				 </div><!--right-bar-->
			</div>	

			
			<div  ng-controller="schemaEdit" id = "schemaPanel" ng-show="schemaView" >
				
				



				<div class="col-md-8">
					<div class="panel panel-info">
						<div class="panel-heading">
							实体元数据
						
							
						</div>
						<div class="panel-body">
							<div class="panel panel-info">
								<div class="panel-heading">
									基本信息
								</div>

								<div class="panel-body">
									
									 <div class="form-horizontal panel-body"    style="padding-top: 40px;">
									    <div class="form-group" >
											<label  class="col-md-2 control-label">id</label>
											<div class="col-md-4">
											  <input type="text" class="form-control schema_info"  ng-model="schema.id">
											</div>

											<label  class="col-md-2 control-label">AppSpaceId</label>
											<div class="col-md-4">
											  <input type="text" class="form-control schema_info"  ng-model="schema.appSpaceId">
											</div>
										    </div><!--form-group-->		
								  
								   		 	
									
											 <div class="form-group">
												<label  class="col-md-2 control-label">实体集名称</label>
												<div class="col-md-4">
												  <input type="text" class="form-control schema_info"  ng-model="schema.entitySetName">
												</div>

												<label  class="col-md-2 control-label">对象名</label>
												<div class="col-md-4">
												  <input type="text" class="form-control schema_info"  ng-model="schema.entityName">
												</div>
										    </div><!--form-group-->		
								  
								   
											 <div class="form-group">
												<label  class="col-md-2 control-label">版本</label>
												<div class="col-md-4">
												  <input type="text" class="form-control schema_info"  ng-model="schema.version">
												</div>
										    </div><!--form-group-->	
									
											 <div class="form-group">
												<label  class="col-md-2 control-label">描述</label>
												<div class="col-md-4">
												  <textarea class="form-control schema_info"   ng-model="schema.description"></textarea>
												</div>
										    </div><!--form-group-->	
							 		  </div><!--form--> 	
							    </div><!--panel body-->

						    <div class="panel panel-info">
								<div class="panel-heading">
									详细信息
									
								</div>
								<div class="panel-body">
									
									<table class="table schema_table">		
				  						<col width="20%" />
							            <col width="15%" />
							            <col width="20%" />
							            <col width="20%" />
							            <col width="10%"/>
							            <col width="15%"/>

							  		<thead>
							  			<tr>	 
							  				<td>名称</td>	
							  				<td>pType</td>
							  				<td>复杂类型</td>
							  				<td>校验规则</td> 
							  				<td>是否array</td> 
							  				<td>&nbsp&nbsp</td> 				
							  			</tr>
							  		</thead>
							  		
							  		<tbody>	
							  			<tr id="input_property" ng-show='propertyShow'>								  			
								  				<td ><input type="text" ng-model="property.name" ></input></td>
								  				<td ><input type="text" ng-model="property.pType" ></input></td>
								  				<td ><input type="text" ng-model="property.complexTypeName" ></input></td>
								  				<td ><input type="text" ng-model="property.verificationRegEx" ></input></td>
								  				
								  		</tr>

							  			<tr ng-repeat="o in schema.properties">						  										  				
							  				<td>{{o.name}}</td>	
							  				<td><select ng-model="o.pType" ng-options="o.id as o.name  for o in propertiesType"  disabled="disabled">
						  						    <option ></option>
						  					        </select></td>
							  				<td>{{o.complexTypeName}}</td>
							  				<td>{{o.verificationRegEx}}</td>
							  				<td>{{o.isArray}}</td>
							  				<td>						  					

							  				</td>	  				
							  			</tr>
							  		</tbody>
							    </table>



								</div>
								
							</div>

						</div>
						
					</div>
				</div>

			</div>		  
			
		
     </div>

  


     
	


   

 

你可能感兴趣的:(AngularJS)