以角度js1将值从一个控制器传递到另一个控制器

时间:2017-07-15 16:37:40

标签: angularjs

我使用$ rootScope将值从一个控制器传递到另一个控制器,但我没有在第二个控制器(购物车)中获取值。

    x.controller("first",function($scope,$http,$rootScope){
    $scope.cart1=function(x,y){
        $rootScope.img=x;
        $rootScope.login=y;
    }
    });
     x.controller("cart",function($scope,$rootScope){
    $scope.cart2=$rootScope.img;

    console.log($scope.cart2)
    });

3 个答案:

答案 0 :(得分:1)

$rootScope 如果您只是在控制器中定义,则无法获取分配的值,您需要根据某个事件将数据从controller1传输到controller2

<强>样本

&#13;
&#13;
var x =angular.module('app', [])
 x.controller("first",function($scope,$rootScope){
    $scope.cart1=function(x,y){
        console.log(x);
        $rootScope.img=x;
        $rootScope.login=y;
    }
 });
 x.controller("cart",function($scope,$rootScope){
     
     $scope.getData=function(){
     $scope.cart2=$rootScope.img;
    console.log($scope.cart2)
    };
 });
&#13;
<!DOCTYPE html>
<html ng-app="app">
<head>
  <script data-require="angular.js@1.4.3" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular.js"></script>
  <link rel="stylesheet" href="style.css" />
  <script src="script.js"></script>
</head>
<body >
 <div ng-controller="first">
    <button ng-click="cart1('test','test2')">transfer</button>
 </div>
 <div ng-controller="cart">
 <button ng-click="getData()">getStoredValue</button>
  {{cart2}}
 </div>
  
</body>
</html>
&#13;
&#13;
&#13;

注意 不建议使用$ rootScope在控制器之间传输变量,而是尝试使用 services

答案 1 :(得分:1)

为什么不使用$broadcast,考虑到你的控制器结构$scope.$parent已经足够了,或者从你发射$rootScope

的地方注入$broadcast
var x =angular.module('app', [])
 x.controller("first",function($scope){
    $scope.cart1=function(x,y){
        $scope.$parent.$broadcast('value changed', {x: X, y: y});
    }
 });
 x.controller("cart",function($scope){
    $scope.$on('value changed', function(data){
        $scope.login = x;
        $scope.cart2 = y;
    });         
 });

现在你的值在范围内设置,在需要时使用它(如果绑定它将自动反映在UI中)

答案 2 :(得分:0)

   (function() {
    "use strict";

  angular
    .module('app')
    .factory("cartFactory", cartFactory);

    function cartFactory($http) {
        return {
             login: '',
             cart2:''
        };
    }})();

这是你的工厂 你可以像这样使用多个控制器......

        var x =angular.module('app', [])
           x.controller("first",function($scope,cartFactory){
                cartFactory.login=x;
                cartFactory.cartFactory=y;


            }
      });



   x.controller("cart",function($scope,cartFactory){

       $scope.login = cartFactory.login;
       $scope.cart2 = cartFactory.cart2;

   });

将一个控制器的数据传递给另一个多控制器非常简单。