angular.module('myApp', []).controller('namesCtrl', function($scope) {
$scope.names = [
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}
];
});
function abc(){
$.ajax({url: "demo_test.txt", success: function(result){
$scope.names = result; // here
}});
}
我想通过result更改scope.names的内容(它将采用json格式),然后通过angular渲染内容。
我想澄清一下我必须在函数内部使用get请求,所以不能使用$ http of angular
答案 0 :(得分:1)
使用$http
代替ajax,因为$http
负责运行摘要周期,负责双向绑定。
function abc(){
$http.get("demo_test.txt")
.then(function(result){
$scope.names = result;
});
}
如果由于某种原因您无法使用$http
,则必须调用$scope.$apply
方法来设置范围值,因为它在内部运行摘要周期。
function abc(){
$.ajax({
url: "demo_test.txt",
success: function(result){
$scope.$apply(function () {
$scope.names = result;
});
}
});
}
如果你的控制器外面有abc
方法,那么你必须得到如下所示的控制器范围,但不是角度推荐的。
function abc(){
var $scope = angular.element('[ng-controller=namesCtrl]').scope();
$.ajax({
url: "demo_test.txt",
success: function(result){
$scope.$apply(function () {
$scope.names = result;
});
}
});
}
答案 1 :(得分:0)
你需要一些东西让Angular知道它需要注意那个变化。 Angular的方法是使用$http,但您也可以使用$scope.$watch。
答案 2 :(得分:0)
我知道您无法访问该范围。您需要使用angular.element('[ng-controller=namesCtrl]').scope()
以hacky方式访问范围,然后您将对范围进行实际控制,但范围中的变量更改将不会运行摘要周期,您需要使用{{}手动运行它1}}在那个范围内。
<强>代码强>
$apply()