我有以下指令:
MyApp.directive('myFilter', ['$filter','$rootScope',
function($filter, $rootScope)
{
var dir = {};
dir.restrict = 'E';
dir.templateUrl = 'views/myFilter.html';
dir.replace = true;
dir.scope =
{
name: '@',
model: '=',
};
dir.link = function(scope,el,attrs)
{
//stuff here
}
return dir;
}]);
这是我如何调用它:
<my-filter model="someField" name="abcd" />
首次初始化指令时,someField
则为空。稍后,通过ajax对其进行检索,并填充其值。
问题是,我怎么看待someField
更新的价值?当我从链接方法执行此操作时:
scope.$watch(scope.model, function()
{
console.log( "changed, new val: ", scope.model );
}
初始化指令时,仅调用一次,然后该值为空。通过ajax(来自$http.get
)检索值时,不会再次调用此watch函数。但是,在我要显示的页面的其他部分{{someField}}
,该值在获取ajax请求时会更新。因此,我认为问题与$scope.apply()
在ajax请求之后执行无关。
编辑: someField
在控制器中分配。这是代码:
MyApp.controller('myCtrl',
['$scope', '$rootScope', '$routeParams',
'ajax', '$filter',
function($scope, $rootScope, $routeParams, ajax, $filter)
{
var userId = parseInt( $routeParams.userId );
$scope.loaded = false;
$scope.someField = ""; //initalize with empty value
var load = function(data)
{
$scope.loaded = true;
$scope.someField = data.someField;
};
ajax.getUser(userId).success(load);
}
]);
该方法ajax.getUser()
执行a
$http.get()
并返回其promise
。在上面的代码中,load
调用的方法设置了的值someField
。
$watch
需要一个可以是函数或字符串的表达式。因此,将其更改为
scope.$watch('model', function() { ... });
要么
scope.$watch(function() { return scope.model; }, function() { ... });
看看这个jsFiddle。
问题内容: 很多时候我们在使用异步javascript时都会遇到问题。我们不确定发布了什么请求以及获得了什么响应。 如何调试AJAX请求。有一个简单的方法可以做到这一点。 问题答案: 我很确定,如果您为每个调用 实例化一个新对象 ,则可以跟踪每个请求:
问题内容: 我不知道如何使用和。官方文档没有帮助。 我不明白的是: 他们连接到DOM吗? 如何更新对模型的DOM更改? 它们之间的连接点是什么? 我尝试了本教程,但这需要对它的理解并且理所当然。 做什么和做什么,以及如何正确使用它们? 问题答案: 您需要了解AngularJS的工作原理才能理解它。 消化周期和作用域 首先,AngularJS定义了所谓的 摘要循环 的概念。这个周期可以看作是一个循环
问题内容: 当应用程序在后台运行并被请求卡住时,数据任务块未调用。 当我打开应用程序时,将调用该块。顺便说一下,我正在使用请求。 这是我的代码: 当应用程序处于活动状态时,可以完美运行。我的代码有什么问题吗?请指出我 问题答案: 如果要在应用程序不再处于前台状态后继续下载,则必须使用后台会话。在后台下载文件中概述了后台会话的基本限制,主要包括: 使用基于委托的背景。 仅使用上传和下载任务,没有完成
问题内容: (做了很多修改,因为它是类的一部分,等等。) 目前,这有点让人讨厌,因为计时器的使用似乎很垃圾。我会使用$ .when和$ .done,但是我不知道可能有多少房间,所以我不知道什么时候放什么。 如何确保仅在所有AJAX请求返回后才调用run_the_rest_of_the_app()? 问题答案: 在进行AJAX调用之前, 完成AJAX调用后(在回调中):
问题内容: 我一直在尝试AngularJS进行实验项目,但我遇到了这个问题。在我的html中,我想显示项目列表 Index.html 最初,我只是使用一个简单的控制器来获取信息并使用以下命令更新视图: controllers.js(原始) 这工作得很好,我可以获得项目清单。同时,通过更改我的结构以使用工厂发出相同的请求并将其绑定到$ scope.items,该命令将不起作用。我尝试了许多$ wat