Angularjs:在另一个控制器内定义的控制器中获取范围变量的值,该控制器位于指令内

时间:2014-09-16 08:55:35

标签: javascript angularjs angularjs-directive

我有一个指令,其中定义了一个控制器,并且有一个变量说&#3​​4; $scope.accesJson"。我需要从另一个控制器访问它。

代码:

angular.module('test.directives').directive("manageAccess", function() {
    return {
        restrict: "E",
        replace: true,
        templateUrl: "template/test.html",
        controller: function($scope, $element, $http) {
            $scope.accesJson = ["hi","hello"];
        }
    };
});

我有另一个控制器,

angular.module("test.controllers").controller("testController", function($scope, $http) {
    $scope.getUsers = function() {
        console.log $scope.accesJson //I need value of $scope.accesJson here.
    }
});

我该怎么做?

请帮忙, 感谢

3 个答案:

答案 0 :(得分:3)

要在两个控制器之间共享资源,您始终可以使用服务或工厂。您也可以通过定义全局变量来实现,但不鼓励这样做。

申报工厂:

var app = angular.module('app',[])
 .factory('appSvc',[function(){
  var resources = {};
   return resources;
 }]);

请注意,您可以在工厂内声明可重复使用的功能。

在您的工厂申报后,请记住将其正确注入需要它的控制器。

app.controller('appCtrl',['appSvc',function(appSvc){
 //do something with your appSvc
 }]);

这是一个非常simple plnkr来展示如何使用服务/工厂来获取和设置数据。

有关深入文档:AngularJs Service

答案 1 :(得分:2)

在不同控制器之间共享数据服务是不错的选择。定义一个,如此,

angular.module("test.services").factory('DataBasket', function () {
    return {};
});

并在指令中

controller: function($scope, $element, $http, DataBasket) {
        DataBasket.accessJson = ["hi", "hello"];
        $scope.accesJson = DataBasket.accessJson;
    }

来自其他控制器

angular.module("test.controllers").controller("testController", function($scope, $http, DataBasket) {
    $scope.getUsers = function() {
        console.log DataBasket.accesJson 
    }
});

答案 2 :(得分:1)

您还可以将外部$ scope中的属性绑定到指令的链接函数中的指令,如下所示:

angular.module('foo', [])

.directive("manageAccess",
  function() {
    return {
      restrict: "E",
      replace: true,
      scope: {
        property: '='
      },
      link: function($scope) {
        $scope.property = { foo: 1 }
      }
    }
  }
)

.controller('Main',
  function($scope) {
    $scope.showAccessJsonValue = function() {
      $scope.value = $scope.accessJson
    }
  }
)

然后在您的模板中,您可以使用ng-click来调用showAccessJsonValue,这将为您提供在指令中指定的值。

像,

<body ng-controller="Main">

<manage-access property="accessJson"></manage-access>

<button ng-click="showAccessJsonValue()">Show value</button>

<pre>{{value | json}}</pre>

</body>

这里是demo Plunk