Angularjs:获取指令中另一个控制器内定义的控制器中作用域变量的值
Angularjs : get value of scope variable in a controller defined inside another controller which is inside directive
我有一个指令,其中定义了一个控制器,并且有一个变量,比如"$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.
}
});
我该怎么做?
请帮忙,感谢
要在两个控制器之间共享资源,您可以始终使用服务或工厂。你也可以通过定义一个全局变量来实现,但这是不鼓励的。
申报工厂:
var app = angular.module('app',[])
.factory('appSvc',[function(){
var resources = {};
return resources;
}]);
请注意,您可以在工厂中声明可重用的函数。
在你的工厂申报后,记得把它正确地注入到需要它的控制器中。
app.controller('appCtrl',['appSvc',function(appSvc){
//do something with your appSvc
}]);
这里有一个非常简单的plnkr来展示如何使用服务/工厂来获取和设置数据。
对于深入的文档:AngularJs Service
对于在不同控制器之间共享数据,服务是一个不错的选择。这样定义一个,
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
}
});
您还可以在指令的链接函数中将外部$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
}
}
)
然后在您的模板中,您可以有一个调用showAccessJsonValue
的ng-click
,它将为您提供在指令中分配的值。
比如
<body ng-controller="Main">
<manage-access property="accessJson"></manage-access>
<button ng-click="showAccessJsonValue()">Show value</button>
<pre>{{value | json}}</pre>
</body>
这是一个演示Plunk。
相关文章:
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 从指令链接函数监视控制器作用域
- 控制器作用域变量在刷新之前未加载
- AngularJS:如何在指令范围的对象发生变化时更新与控制器作用域相关联的控制器作用域
- ng-click 指令不调用控制器作用域中定义的函数
- 如何从2级指令访问控制器作用域
- 角度指令控制器作用域继承
- 触发指令AngularJs的控制器作用域
- Angularjs-在路由更改时刷新控制器作用域
- 访问父指令's子指令中的控制器作用域变量
- 将Angular Service对象绑定到控制器作用域并更新
- UI引导日期选择器不调用内联控制器作用域上的函数
- 将变量从控制器作用域传递到指令
- 工厂中与控制器作用域绑定的已修改数据不会更新
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 如何在angular 1.4.5+中操纵指令中的控制器作用域
- AngularJS:在两个具有隔离作用域的指令之间共享一个控制器作用域
- 如何将控制器作用域变量传递给angular.元素在头部元素中追加子元素时
- AngularJS+Jasmine -在指令中写入一个控制器作用域
- 如何从嵌入式D3脚本中访问Angular控制器作用域