我在AngularJS更新模型更改后的视图元素时出现问题。我有一个包含2个字段的表单,我希望用户填写其中1个,并让另一个自动填充(在ng-blur上)。我发布的示例使用人名和社会安全号码(SSN)。通过填写SSN,app会执行HTTP调用以获取该SSN的名称,反之亦然。
这是Angular指令:
define([
'angular'
], function (angular) {
angular.module('form.formDirective', [])
.directive('formDirective', formDirective);
formDirective.$inject = ["$rootScope", "$sce", "$document", "$translate", "$filter", "$http"];
function formDirective($rootScope, $sce, $document, $translate, $filter, $http) {
var myLink = function ($scope, $element, attrs) {
$scope.setFieldsForName = function(name) {
var url = 'http://some.rest.api/getSsn/' + name;
$http.get(url)
.success(function(data, status, headers, config) {
$scope.personSsn = data.SSN;
})
.error(function (data, status, headers, config) {
// no-op
});
};
$scope.setFieldsForSsn = function(ssn) {
var url = 'http://some.rest.api/getName/' + ssn;
$http.get(url)
.success(function(data, status, headers, config) {
$scope.personSsn = data.name;
})
.error(function (data, status, headers, config) {
// no-op
});
};
};
return {
templateUrl: 'form.directive.html',
restrict : 'EA',
scope : {
field : '=',
model : '=',
renameChildKey: "=",
preview : "=",
delete : '&',
ngDisabled : "=",
isEditData : "="
},
replace : true,
link : myLink
};
}
});
以下是相关的HTML:
<!-- Name -->
<div class="form-group">
<input type="text"
id="{{getId(0)}}"
class="form-control"
placeholder="Name"
ng-model="personName"
ng-blur="setFieldsForName(personName);"/>
</div>
<!-- SSN -->
<div class="form-group">
<input type="text"
id="{{getId(1)}}"
class="form-control"
placeholder="SSN"
ng-model="personSsn"
ng-blur="setFieldsForSsn(personSsn);"/>
</div>
这适用于一种情况,例如,填写姓名并获得SSN,或者相反。但是在第一个之后的任何尝试,发生的是调用函数,它获取数据,更新适当的范围变量,但输入字段值不反映变量的更新值。
我环顾四周,看到$ scope。$ apply()是一个流行的解决方案,然而,它对我不起作用,我得到一个错误,说明代码已经在digest()阶段,所以它无法运行apply()。
如果你知道发生了什么,我会感激任何帮助!
答案 0 :(得分:0)
您应该使用 $ watch 作为范围方法,因为在模糊期间将触发事件。所以$ watch会查找任何更改绑定表达式,特别是每次更改。
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
sudo R CMD javareconf
LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudio
install.packages("rJava",type='source')
install.packages("RWeka",type='source')
install.packages(c("NLP", "openNLP", "qdap"))
详细探索$ watch。 HERE