Angularjs 不呈现 $rootscope 数据

Posted

技术标签:

【中文标题】Angularjs 不呈现 $rootscope 数据【英文标题】:Angularjs not rendering $rootscope data 【发布时间】:2015-09-06 06:24:44 【问题描述】:

我遇到了一些问题,实际上我已经解决了问题,问题是标头无法获得响应(如 CORS 问题),通过使用标头和 transformRequest 来克服,如下面的代码所示。之后我得到了 web 服务数据,但是在一个控制器中使用了 $rootscope,它渲染了第二种方法 (API) 的一些数据 id,以便在另一个控制器中使用第三个 api 来获取数据,然后我只得到了一分钟它会抛出错误:无法读取 null 的属性“公司数据”,它是第三个 api 中的字段。当我使用 $rootScope.Test.companies[0].companyname 时,它​​是存储数据,并且对于所有 api(如主键)都是唯一的。

   var request = $http(
        method: "post",
        url: "http://app.xyz/xyzapp/public/user/login",
        headers: 'Content-Type': 'application/x-www-form-urlencoded',
        transformRequest: function(obj) 
          var str = [];

          str.push(encodeURIComponent('email_id') + "=" + encodeURIComponent('demo@xyz.com'));
          str.push(encodeURIComponent('password') + "=" + encodeURIComponent('demo@xyz'));
          return str.join("&");
        ,            

    );  

    request.success(function( response ) 

        console.log("Hiiiii::::"+JSON.stringify(response,status));
        if (response.status=="success")


          $rootScope.Test1=response.user_id;

          var request1 = $http(
              method: "post",
              url: "http://app.xyz/xyzapp/public/company/getUserCompanyList",
              headers: 'Content-Type': 'application/x-www-form-urlencoded',
              transformRequest: function(obj) 
                var str = [];

                str.push(encodeURIComponent('user_id') + "=" + encodeURIComponent(response.user_id ));
                // str.push(encodeURIComponent('password') + "=" + encodeURIComponent('demo@123'));
                return str.join("&");
                         

          );  
// getCompany
          request1.success(function( response ) 

              console.log("Hiiiii::::"+JSON.stringify(response,status)+"   "+response.companies.length+":Length");
              if (response.status=="success")
                // alert(1);
                $state.go('tabdash');
                $rootScope.Test = response;


                          
          );

所以请告诉我如何将一个控制器数据使用到另一个我正在使用另一个 api 的地方,该 api 将获得父级的 $rootscope 日期。 如果有人知道这件事或任何事情,请告诉我

谢谢

【问题讨论】:

【参考方案1】:

是的,您可以通过两种方法在另一个控制器中使用一个控制器的变量

    创建服务以在它们之间进行通信。 使用 $rootScope.$broadcast

示例代码

angular.module('myservice', []).service('msgBus', function() 
        this.serviceValue= ;

    ]);
);

并像这样在控制器中使用它:

控制器 1

angular.module('myservice', []).controller('ctrl1',function($scope, msgBus) 
    $scope.sendmsg = function() 
        msgBus.serviceValue='Hello'; 
   
);

控制器 2

angular.module('myservice', []).controller('ctrl2',function($scope, msgBus) 
$scope.checkValue()   
alert( msgBus.serviceValue);

);

【讨论】:

如果我嵌套了 $http 并且我想将嵌套的一个数据返回给控制器,那我该怎么办?请告诉我。 你需要的是$q.all。参考:***.com/questions/17027196/… $http(method: 'GET', url: '/api-one-url', data:email: email,pwd:pwd ).then(function(apiOneData) $ http(method: 'GET', url: '/api-two-url', data:userid:userid).then(function(apiTwoData) // 我想将响应保存在数组中以供更多使用超过一个控制器 console.log(apiOneData, apiTwoData); ); ); @shivam 如果您从此代码中获得帮助,请投票支持答案并单击答案上的右侧图标 你能解决我的另一个问题吗? -->***.com/questions/31408810/…

以上是关于Angularjs 不呈现 $rootscope 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 angularjs 中的 $rootScope 变量? [复制]

Angularjs [$rootScope:inprog] 进行中错误

Angularjs总结$ cookie和$rootscope

获取 AngularJS 错误:“[$rootScope:inprog] $digest 已经在进行中”没有手动 $apply

Angularjs:为啥页面刷新会破坏 $rootScope 的值?

AngularJS中Error: [$rootScope:inprog]的解决办法