如何在 Angular 服务函数中设置 $rootScope?
How do you set $rootScope within Angular Service function?
我在为 Angularjs 设置 $rootScope 时遇到问题。
下面是我的函数
App.controller('Controller',
function (UtilityService, $rootScope) {
var setSession = function () {
$rootScope.test = "yes"; // <-- I get this
UtilityService.getSession().success(
function () {
$rootScope.test = "No"; // <-- I don't get this How do I get/set this value?
});
};
setSession();
});
附加信息:
一种可行的方法是设置一个在多个控制器之间交互的服务。有谁知道如何使用返回 http.get json 对象的服务来做到这一点。
我无法在我的控制器中获取在服务中实例化的动态范围。
正如我之前所写,我会尽可能使用 $scope,如果您需要在多个控制器之间共享数据,您可以使用服务。代码应该是这样的:
var app = angular.module('myApp', []);
app.factory('$http', 'myService', function ($http, myService) {
var customers = {};
$http.get("http://www.w3schools.com/website/Customers_JSON.php")
.success(function (response) {
customers = response;
});
return {
customers: customers
};
});
app.controller('controller_one', function($scope, myService) {
$scope.serv = myService.customers;
});
app.controller('controller_two', function($scope, myService) {
$scope.serv = myService.customers;
});
为了解决我的问题,我不得不
1) 将 $rootScope 传递到我的第二个控制器
App.controller($rootScope) {
2) 将我的第二个控制器的功能设置为 $rootScope
$rootScope.functionCall = function () {};
3) 将我的传递值设置为 $rootScope ($rootScope.orderId)
$rootScope.functionCall = function () {
Service.getItems($rootScope.orderId).success(
function(results) {
$scope.items = results;
});
};
4) 在我的实用程序控制器中,我循环遍历我的结果,解析它们,并将它们设置为 $rootScope,正如您在#3 中看到的那样我正在初始化“$rootScope.orderId”
angular.forEach(results, function (value, key) {
if (key != null) {
$parse(key).assign($rootScope, value);
}
});
5) 我正在从我的服务调用中重新调用控制器的函数! 这就是我将变量 "in scope"
$rootScope.functionCall();
6) 我也在测试这个函数是否存在,因为不同的页面使用实用程序代码但可能没有执行的函数
if (typeof $rootScope.functionCall == 'function')
var setSession = function () {
UtilityService.getSession().success(
function (results) {
// Place the rootscope sessions in scope
angular.forEach(results, function (value, key) {
if (key != null) {
$parse(key).assign($rootScope, value);
}
});
// Have to bypass "scope" issues and thus have to execute these fns()
if (typeof $rootScope.functionCall == 'function') {
$rootScope.functionCall();
}
});
};
setSession();
我在为 Angularjs 设置 $rootScope 时遇到问题。
下面是我的函数
App.controller('Controller',
function (UtilityService, $rootScope) {
var setSession = function () {
$rootScope.test = "yes"; // <-- I get this
UtilityService.getSession().success(
function () {
$rootScope.test = "No"; // <-- I don't get this How do I get/set this value?
});
};
setSession();
});
附加信息:
一种可行的方法是设置一个在多个控制器之间交互的服务。有谁知道如何使用返回 http.get json 对象的服务来做到这一点。
我无法在我的控制器中获取在服务中实例化的动态范围。
正如我之前所写,我会尽可能使用 $scope,如果您需要在多个控制器之间共享数据,您可以使用服务。代码应该是这样的:
var app = angular.module('myApp', []);
app.factory('$http', 'myService', function ($http, myService) {
var customers = {};
$http.get("http://www.w3schools.com/website/Customers_JSON.php")
.success(function (response) {
customers = response;
});
return {
customers: customers
};
});
app.controller('controller_one', function($scope, myService) {
$scope.serv = myService.customers;
});
app.controller('controller_two', function($scope, myService) {
$scope.serv = myService.customers;
});
为了解决我的问题,我不得不
1) 将 $rootScope 传递到我的第二个控制器
App.controller($rootScope) {
2) 将我的第二个控制器的功能设置为 $rootScope
$rootScope.functionCall = function () {};
3) 将我的传递值设置为 $rootScope ($rootScope.orderId)
$rootScope.functionCall = function () { Service.getItems($rootScope.orderId).success( function(results) { $scope.items = results; }); };
4) 在我的实用程序控制器中,我循环遍历我的结果,解析它们,并将它们设置为 $rootScope,正如您在#3 中看到的那样我正在初始化“$rootScope.orderId”
angular.forEach(results, function (value, key) { if (key != null) { $parse(key).assign($rootScope, value); } });
5) 我正在从我的服务调用中重新调用控制器的函数! 这就是我将变量 "in scope"
$rootScope.functionCall();
6) 我也在测试这个函数是否存在,因为不同的页面使用实用程序代码但可能没有执行的函数
if (typeof $rootScope.functionCall == 'function')
var setSession = function () {
UtilityService.getSession().success(
function (results) {
// Place the rootscope sessions in scope
angular.forEach(results, function (value, key) {
if (key != null) {
$parse(key).assign($rootScope, value);
}
});
// Have to bypass "scope" issues and thus have to execute these fns()
if (typeof $rootScope.functionCall == 'function') {
$rootScope.functionCall();
}
});
};
setSession();