Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular JS服务设置变量正确且未定义_Javascript_Html_Angularjs_Undefined_Typeerror - Fatal编程技术网

Javascript Angular JS服务设置变量正确且未定义

Javascript Angular JS服务设置变量正确且未定义,javascript,html,angularjs,undefined,typeerror,Javascript,Html,Angularjs,Undefined,Typeerror,因此,我创建了一个angular js模块,并尝试链接一个服务,并使用该服务在整个应用程序中共享变量。一切正常,但当我尝试将子菜单[1]设置为对象时,会显示子菜单[1]未定义。这是正确的,它还没有被创建。但我只想将子菜单[1]设置为一个对象。不明白为什么要创建它。不知道为什么它会说uncaughtypeerror:无法读取未定义的属性子菜单。I console.log我打开的菜单栏[key]返回时未定义。但这也没有道理 setSubMenu : function(key, subKey, val

因此,我创建了一个angular js模块,并尝试链接一个服务,并使用该服务在整个应用程序中共享变量。一切正常,但当我尝试将子菜单[1]设置为对象时,会显示子菜单[1]未定义。这是正确的,它还没有被创建。但我只想将子菜单[1]设置为一个对象。不明白为什么要创建它。不知道为什么它会说uncaughtypeerror:无法读取未定义的属性子菜单。I console.log我打开的菜单栏[key]返回时未定义。但这也没有道理

setSubMenu : function(key, subKey, value){ console.log(sharedVariables.menuArray[key]); sharedVariables.menuArray[key].subMenu[subKey] = value; } 设置子菜单:功能(键、子键、值){ log(sharedVariables.menuArray[key]); sharedVariables.menuArray[key]。子菜单[subKey]=值; } 以下是我所拥有的:

    var myModule = angular.module('companiesApp', ['ngResource']).config(function($routeProvider) {
    $routeProvider
        .when ('/', {controller:ListCtrl, template: $('#companies-list').html()})
        .when ('/new', {controller:NewCtrl, template: $('#companies-edit').html()})
        .when('/newMenu/:companyID', {controller:EditMenuCtrl, template: $('#menu-edit').html()})
        .when ('/edit/:companyID', {controller:EditCtrl, template: $('#companies-edit').html()})
        .when ('/editMenu/:companyID', {controller:EditMenuCtrl, template: $('#menu-edit').html()})
        .when ('/settings/:companyID', {controller:SettingsCtrl, template: $('#companies-settings').html()})});


myModule.service('sharedVariables', function(){
    var sharedVariables = { count : 0, originalCount : 0, menuArray : []};
    return{
        getOriginalCount : function(){
            return sharedVariables.originalCount;
        },
      setOriginalCount : function(value){
            sharedVariables.originalCount = value;
        },
        getCount : function(){
            return sharedVariables.count;
        },
        setCount : function(value){
            sharedVariables.count = value;
        },
        getMenu : function(){
            return sharedVariables.menuArray;
        },
        setMenu : function(key, value){
            sharedVariables.menuArray[key] = value;
        },
      setMenuName : function(key,value){
            sharedVariables.menuArray[key].name = value;
        },
        setMenuEndPos : function(key, posLeft, posTop){
            sharedVariables.menuArray[key].endPosLeft = posLeft;
            sharedVariables.menuArray[key].endPosTop = posTop;
        },
        setSubMenu : function(key, subKey, value){
            sharedVariables.menuArray[key].subMenu[subKey] = value;
        }
    };
});

function EditMenuCtrl($scope,$routeParams, $location, sharedVariables){
    var count = 0;
    $scope.companyID = $routeParams.companyID;
    $scope.menuArray = [];
    $.ajax({
        url : "companies.php",
        type : "post",
        data : {
            action : "getMenus",
            id : $routeParams.companyID
        },
        success : function(data,status){
          var responses = JSON.parse(data);
            $('#menu').empty();
            for(i in responses){
                //if the Root Order LI has not been created, create it
                if($('#li-' + responses[i].rootORDER).length == 0){
                    count++;
                    var html = '<li id="li-' + responses[i].rootORDER + '" class="dropdown">' + '<a id="link-' + responses[i].rootORDER;
                    html += '" role="button" class="dropdown-toggle" data-type="text" data-toggle="dropdown">' + responses[i].menuROOT;
                    html += '</a>' + '<ul id="ul-' + responses[i].rootORDER; 
                    html += '" class="dropdown-menu" role="menu" aria-labelledby="dLabel" ><li role="presentation"><a href="javascript:void(0)" onclick="addLITOUL()" role="menuitem"><i class="icon-plus-sign"></i></a></li></ul></li>';
                    $('#menu').append(html);
                    //Record the Start Position of the Element
                    var Start = $('#li-' + responses[i].rootORDER).position();
                    sharedVariables.setMenu(responses[i].rootOrder, {name : responses[i].menuROOT, startPosLeft : Start.left, startPosTop : Start.top, subMenu : []});
                    //Make the Title Editable
                    $('#link-' + responses[i].rootORDER).editable(function(value,settings){
                        var tempID = $(this).attr('id');
                        tempID = tempID.substring(5);
                        sharedVariables.setMenuName(tempID,value);
                        return(value);
                    });
                    //Make the DropDowns and make them draggable
                    $('.dropdown-toggle').dropdown();
                    $('.dropdown').draggable({
                        containment: "#container", 
                        scroll: false, 
                        snap: true,
                        stop: function(event, ui) {
                            var Stoppos = $(this).position();
                            $("#position").text("STOP: \nLeft: "+ Stoppos.left + "\nTop: " + Stoppos.top);
                            var tempID = $(this).attr("id");
                            tempID = tempID.substring(3); //remove li- to get the index into the array
                            sharedVariables.setMenuEndPos(tempID, Stoppos.left, Stoppos.top);
                        }
                    });
                }//end of if
            }//end of (for i in responses)
            sharedVariables.setOriginalCount(count);
            sharedVariables.setCount(count);
            //Fill in the inner UL with it's links
            for(i in responses){
                html = '<li id="' + i + '-' + responses[i].menuTITLE+ '" role="presentation"><a role="menuitem" href="javascript:void(0)">' + responses[i].menuTITLE + '</a>';
                html += '</li>';
                $('#ul-' + responses[i].rootORDER).append(html);
                sharedVariables.setSubMenu(responses[i].rootORDER, responses[i].linkORDER, {name: responses[i].menuTITLE});
            }
        }
    });
    console.log(sharedVariables.getOriginalCount());
}
var myModule=angular.module('companiesApp',['ngResource']).config(函数($routeProvider){
$routeProvider
.when(“/”,{controller:ListCtrl,template:$(“#公司列表”).html()
.when('/new',{controller:NewCtrl,template:$('#companys edit').html()})
.when('/newMenu/:companyID',{controller:EditMenuCtrl,template:$('#menu edit').html()})
.when('/edit/:companyID',{controller:EditCtrl,template:$('#companys edit').html()})
.when('/editMenu/:companyID',{controller:EditMenuCtrl,template:$('#菜单编辑').html()})
.when('/settings/:companyID',{controller:SettingsCtrl,template:$('#companys settings').html()});
myModule.service('sharedVariables',function()){
var sharedVariables={count:0,originalCount:0,menuArray:[]};
返回{
getOriginalCount:函数(){
返回sharedVariables.originalCount;
},
setOriginalCount:函数(值){
sharedVariables.originalCount=值;
},
getCount:函数(){
返回sharedVariables.count;
},
setCount:函数(值){
sharedVariables.count=值;
},
getMenu:function(){
返回sharedVariables.menuArray;
},
设置菜单:功能(键、值){
sharedVariables.menuArray[key]=值;
},
setMenuName:函数(键、值){
sharedVariables.menuArray[key].name=value;
},
setMenuEndPos:函数(键、左键、后键){
sharedVariables.menuArray[key].endPosLeft=posLeft;
sharedVariables.menuArray[key].endPosTop=posTop;
},
设置子菜单:功能(键、子键、值){
sharedVariables.menuArray[key]。子菜单[subKey]=值;
}
};
});
函数EditMenuCtrl($scope、$routeParams、$location、sharedVariables){
var计数=0;
$scope.companyID=$routeParams.companyID;
$scope.menuArray=[];
$.ajax({
url:“companys.php”,
类型:“post”,
数据:{
操作:“获取菜单”,
id:$routeParams.companyID
},
成功:功能(数据、状态){
var responses=JSON.parse(数据);
$(“#菜单”).empty();
(我在答复中){
//如果尚未创建根订单LI,请创建它
if($('#li-'+响应[i].rootORDER).length==0){
计数++;
var html='
  • '+'
  • '; $(“#菜单”).append(html); //记录元件的起始位置 var Start=$('#li-'+响应[i].rootORDER.position(); setMenu(responses[i].rootOrder,{name:responses[i].menuROOT,startPosLeft:Start.left,startPosTop:Start.top,子菜单:[]}); //使标题可编辑 $('#link-'+responses[i].rootORDER).可编辑(函数(值、设置){ var tempID=$(this.attr('id'); tempID=tempID.子字符串(5); setMenuName(tempID,value); 回报(价值); }); //制作下拉列表并使其可拖动 $('.dropdown toggle').dropdown(); $('.dropdown')。可拖动({ 安全壳:“容器”, 卷轴:错, 是的, 停止:功能(事件、用户界面){ var Stoppos=$(this.position(); $(“#位置”).text(“停止:\nLeft:+Stoppos.left+”\nTop:+Stoppos.top); var tempID=$(this.attr(“id”); tempID=tempID.substring(3);//删除li-将索引放入数组 sharedVariables.setMenuEndPos(tempID,Stoppos.left,Stoppos.top); } }); }//if结束 }//结束(对于响应中的i) sharedVariables.setOriginalCount(计数); sharedVariables.setCount(计数); //用它的链接填充内部UL (我在答复中){ html='
  • ”; html+='
  • '; $('#ul-'+responses[i].rootORDER).append(html); 设置子菜单(响应[i].rootORDER,响应[i].linkORDER,{name:responses[i].menutile}); } } }); log(sharedVariables.getOriginalCount()); }
    我敢说您的问题与以下事实有关:您使用
    responses[I]键调用
    setMenu
    。rootOrder
    setSubMenu
    使用不同的
    responses[I]键调用
    setMenu
    。rootOrder
    。根据代码的其余部分判断,
    responses[i].rootO