我有一个指令,其中定义了一个控制器,并且有一个变量说" $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.
}
});
我该怎么做?
请帮忙, 感谢
答案 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。