Angular $http 后指令未更新
Angular Directive not updating after $http
我有一个 angular 指令,如下所示:
myApp.directive('foo', function() {
return {
template: '<span>{{foo.bar}}</span>',
restrict: 'E',
scope: true,
controller: 'myController'
};
});
编辑
我最初使用此控制器设置指令:
myApp.controller('myController', function ($scope, MyModel) {
$scope.foo = MyModel.get();
});
从第二个控制器修改模型似乎工作正常:
myApp.controller('myOtherController', function($scope, MyModel) {
setTimeout(function() {
MyModel.set({
bar: "biz"
});
}, 3000);
});
但不适用于此控制器代码:
myApp.controller('myOtherController', function($scope, MyModel) {
$http.get("/resource").then(function(response) {
MyModel.set(response.data);
});
});
我已经确认模型在两个实例中都更新了,但是指令没有使用 $http 请求更新视图。
这里有一个 Plunker 可以让您大致了解。
我尝试了各种 $timeout/$scope.$apply 解决方案,但它们要么什么都不做,要么通过摘要进行中错误。任何帮助将不胜感激
当您使用 .then() 时,您的响应数据在 response.data
myApp.controller('myController', function($scope, MyModel) {
$scope.foo = MyModel.get();
$http.get("/resource").then(function(response) {
MyModel.set(response.data);
});
});
promise 的 .success() 方法将 response.data 作为第一个参数传递:
myApp.controller('myController', function($scope, MyModel) {
$scope.foo = MyModel.get();
$http.get("/resource").success(function(response) {
MyModel.set(response.data);
});
});
此外,你在初始化控制器时初始化了 $scope.foo = MyModel.get(),所以 $scope.foo 的值将是你调用 [=32 后的旧值=]()。修复:
myApp.controller('myController', function($scope, MyModel) {
$scope.foo = MyModel.get();
$http.get("/resource").then(function(response) {
MyModel.set(response.data);
$scope.foo = MyModel.get();
});
});
我必须做的唯一更改是从您的 运行 函数发送的数据
.run(function($httpBackend) {
var res = {
bar: "It WORKED"
};
不太确定在您的工厂实现中调用 $timeout 的目的是什么,并且您的 MyModel 工厂似乎有点复杂(我认为有更简单的方法可以实现您所追求的目标)。
我有一个 angular 指令,如下所示:
myApp.directive('foo', function() {
return {
template: '<span>{{foo.bar}}</span>',
restrict: 'E',
scope: true,
controller: 'myController'
};
});
编辑 我最初使用此控制器设置指令:
myApp.controller('myController', function ($scope, MyModel) {
$scope.foo = MyModel.get();
});
从第二个控制器修改模型似乎工作正常:
myApp.controller('myOtherController', function($scope, MyModel) {
setTimeout(function() {
MyModel.set({
bar: "biz"
});
}, 3000);
});
但不适用于此控制器代码:
myApp.controller('myOtherController', function($scope, MyModel) {
$http.get("/resource").then(function(response) {
MyModel.set(response.data);
});
});
我已经确认模型在两个实例中都更新了,但是指令没有使用 $http 请求更新视图。
这里有一个 Plunker 可以让您大致了解。
我尝试了各种 $timeout/$scope.$apply 解决方案,但它们要么什么都不做,要么通过摘要进行中错误。任何帮助将不胜感激
当您使用 .then() 时,您的响应数据在 response.data
myApp.controller('myController', function($scope, MyModel) {
$scope.foo = MyModel.get();
$http.get("/resource").then(function(response) {
MyModel.set(response.data);
});
});
promise 的 .success() 方法将 response.data 作为第一个参数传递:
myApp.controller('myController', function($scope, MyModel) {
$scope.foo = MyModel.get();
$http.get("/resource").success(function(response) {
MyModel.set(response.data);
});
});
此外,你在初始化控制器时初始化了 $scope.foo = MyModel.get(),所以 $scope.foo 的值将是你调用 [=32 后的旧值=]()。修复:
myApp.controller('myController', function($scope, MyModel) {
$scope.foo = MyModel.get();
$http.get("/resource").then(function(response) {
MyModel.set(response.data);
$scope.foo = MyModel.get();
});
});
我必须做的唯一更改是从您的 运行 函数发送的数据
.run(function($httpBackend) {
var res = {
bar: "It WORKED"
};
不太确定在您的工厂实现中调用 $timeout 的目的是什么,并且您的 MyModel 工厂似乎有点复杂(我认为有更简单的方法可以实现您所追求的目标)。