如何一次处理所有数据并应用于 angularjs 中的控制器
How to all data at once and apply to controllers in angularjs
我想通过AJAX($http)请求一次获取所有数据并应用到所有控制器
我从 google 中选择了这段代码,它表明我必须为每个控制器发出请求,我可以一次获取数据 ajax 根据我试过的控制器调用和应用对象在 angular 但它不起作用请帮我找到一种方法,我可以立即获取数据并更新控制器中的所有数据
<p>Today's welcome message is:</p>
<h1>{{myWelcome}}</h1>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http.get("welcome.htm")
.then(function(response) {
$scope.myWelcome = response.data;
});
});
</script>
谢谢。
您可以改用$rootScope
<p>Today's welcome message is:</p>
<h1>{{myWelcome}}</h1>
<script>
var app = angular.module('myApp', []);
app.run(function($rootScope){
$http.get("welcome.htm")
.then(function(response) {
$rootScope.myWelcome = response.data;
});
})
app.controller('myCtrl', function($scope, $http) {
// Here watch for scope
$scope.$watch("myWelcome", function(value){
console.log(value)
})
});
</script>
根据您的评论,这将有效:
mainApp.controller('ABC',function($rootScope){
$scope.somethingHappened = function(){
$rootScope.$emit('valueChanged',your_data_to_be_passed)
}
})
mainApp.controller('DEF',function($rootScope){
$rootScope.$on('valueChanged',function(event,data){
console.log(data) // you'll see your_data_to_be_passed
})
})
由于 controllers
不相关,您应该更喜欢 $rootScope
事件而不是 $scope.$broadcast
或 $scope.$emit
。您可以在在线教程中获得更多关于它们的详细信息
如果数据不是字符串,如果它的对象访问属性,如果它的数组访问索引,您可以使用 localStorage
和 JSON(字符串化和解析)方法。
<script>
var app = angular.module('myApp', []);
app.run(function($rootScope){
$http.get("welcome.htm")
.then(function(response) {
localStorage.setItem('data', JSON.stringify(response));
});
})
app.controller('anotherCtrl', function($scope, $http) {
$scope.myWelcome = JSON.parse(getItem('data'));
/*or you can do this
var full_data = JSON.parse(getItem('data'));
(object)$scope.myWelcome = full_data.[some_property];
(array of objects)$scope.myWelcome = full_data[index].[some_property];
(just array) $scope.myWelcome = full_data[index]
*/
});
</script>
我想通过AJAX($http)请求一次获取所有数据并应用到所有控制器
我从 google 中选择了这段代码,它表明我必须为每个控制器发出请求,我可以一次获取数据 ajax 根据我试过的控制器调用和应用对象在 angular 但它不起作用请帮我找到一种方法,我可以立即获取数据并更新控制器中的所有数据
<p>Today's welcome message is:</p>
<h1>{{myWelcome}}</h1>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http.get("welcome.htm")
.then(function(response) {
$scope.myWelcome = response.data;
});
});
</script>
谢谢。
您可以改用$rootScope
<p>Today's welcome message is:</p>
<h1>{{myWelcome}}</h1>
<script>
var app = angular.module('myApp', []);
app.run(function($rootScope){
$http.get("welcome.htm")
.then(function(response) {
$rootScope.myWelcome = response.data;
});
})
app.controller('myCtrl', function($scope, $http) {
// Here watch for scope
$scope.$watch("myWelcome", function(value){
console.log(value)
})
});
</script>
根据您的评论,这将有效:
mainApp.controller('ABC',function($rootScope){
$scope.somethingHappened = function(){
$rootScope.$emit('valueChanged',your_data_to_be_passed)
}
})
mainApp.controller('DEF',function($rootScope){
$rootScope.$on('valueChanged',function(event,data){
console.log(data) // you'll see your_data_to_be_passed
})
})
由于 controllers
不相关,您应该更喜欢 $rootScope
事件而不是 $scope.$broadcast
或 $scope.$emit
。您可以在在线教程中获得更多关于它们的详细信息
如果数据不是字符串,如果它的对象访问属性,如果它的数组访问索引,您可以使用 localStorage
和 JSON(字符串化和解析)方法。
<script>
var app = angular.module('myApp', []);
app.run(function($rootScope){
$http.get("welcome.htm")
.then(function(response) {
localStorage.setItem('data', JSON.stringify(response));
});
})
app.controller('anotherCtrl', function($scope, $http) {
$scope.myWelcome = JSON.parse(getItem('data'));
/*or you can do this
var full_data = JSON.parse(getItem('data'));
(object)$scope.myWelcome = full_data.[some_property];
(array of objects)$scope.myWelcome = full_data[index].[some_property];
(just array) $scope.myWelcome = full_data[index]
*/
});
</script>