Javascript 角双向装订
我有一个Javascript 角双向装订,javascript,json,angularjs,angularjs-scope,Javascript,Json,Angularjs,Angularjs Scope,我有一个Angular指令,它读取文件的内容并填充表单。当前,它似乎在更新控制器中的$scope变量,但视图中没有更新绑定到那些$scope变量的表单元素。为什么会这样 下面的代码片段如下所示: 我的指令,我使用它从文件读入并调用控制器的$scope['modify_form']],它允许我更新与我的表单对应的$scope变量 我的指令的HTML(视图端) 我的$scope['modify_form']的控制器逻辑,它调用一组助手函数,其中一个如下所示 我的表单视图的HTML片段;这就是根本问题
Angular
指令,它读取文件
的内容并填充表单。当前,它似乎在更新控制器中的$scope
变量,但视图中没有更新绑定到那些$scope
变量的表单元素。为什么会这样
下面的代码片段如下所示:
读入并调用控制器的$scope['modify_form']]
,它允许我更新与我的表单对应的$scope
变量李>
$scope['modify_form']
的控制器逻辑,它调用一组助手函数,其中一个如下所示李>
HTML
片段;这就是根本问题所在,因为当我调用$scope['modify_form']
app.directive('modifyBtn',函数($compile){
返回{
限制:'E',
范围:{
modifyJSON:“&modifyJSON”,
},
链接:函数(范围、元素、属性){
var fileElem=angular.element(element.find(“#file_input2”);
console.log(fileElem);
var showUpload=函数(){
//显示文件输入元素
var file=fileElem[0]。文件[0];
var reader=new FileReader();
reader.readAsText(文件);
reader.onload=函数(e){
var-uploadedJSON;
试一试{
uploadedJSON=JSON.parse(reader.result);
}捕获(e){
//应显示帮助块(或警告)
返回;
}
console.log(uploadedJSON);//@debug
对于(uploadedJSON中的var键){//只有一个键
if(uploadedJSON.hasOwnProperty(键)){
会话存储[模型]=密钥;
sessionStorage[NAMESPACE]=uploadedJSON[key][NAMESPACE]
变量字段=[字段、链接、主键、表、SQL、验证];
fields.forEach(函数(字段){
if(uploadedJSON[key].hasOwnProperty(字段)){
sessionStorage[field]=JSON.stringify(uploadedJSON[key][field]);
}
});
//在不重新加载页面的情况下触发修改
scope.modifyJSON();
}
}
}
};
$(fileElem).on('change',showUpload);
}
}
});
指令的我的视图(HTML
)如下所示:
上传JSON
在我的控制器中,这里是更新绑定到表单的$scope
变量的位置:
$scope['modifyForm']=function(){//如果读取JSON,则填充元素
修改_数据();
修改_字段();
修改链接();
修改_pkeys();
修改_表();
修改_sql();
修改_验证();
sessionStorage.clear();
}
函数modify_data(){
var-total=[模型,名称空间];
总体。forEach(功能(elem){
if(存在(会话存储[elem])){
$scope['data'][elem]=会话存储[elem];
}
});
}
在视图中,我的表单元素是如何绑定的
{{myConstants[“model”]}
{{myConstants[“namespace”]}
Noah,我喜欢你在这里做一些聪明和鬼鬼祟祟的事情。我知道这听起来很奇怪,但你应该通过开发者控制台查看DOM元素(我建议使用Chrome)。您将看到您将ng model
属性以Angular解释它的方式写在元素上。您应该确保Angular在尝试评估ng model
提供的值时没有阻塞,您甚至可以将数据['undefined']
视为您的ng model
,但我对此没有保证。如果可以的话,可以通过开发者控制台截图这些元素的样子,并将其包含在这里。我承认我还没有阅读所有的代码。您的修改表单
函数中可能缺少$scope.$apply()
?只是一种感觉……正如我所看到的,您读取了一个文件,所以这可能是范围的同步问题。在这种情况下,我会使用$q服务。最好的办法是尽可能多地记录($log或console.log,info,console.dir…),看看哪里出了问题。顺便说一句,这真的很有趣,我迫不及待地想告诉我们你是如何解决的。你在这里做了一些聪明和鬼鬼祟祟的事情诺亚,我喜欢。我知道这听起来很奇怪,但是您应该通过开发者控制台查看DOM元素(我建议使用Chrome)。您将看到您将ng model
属性以Angular解释它的方式写在元素上。您应该确保Angular在尝试评估ng model
提供的值时没有阻塞,您甚至可以将数据['undefined']
视为您的ng model
,但我对此没有保证。如果可以的话,可以通过开发者控制台截图这些元素的样子,并将其包含在这里。我承认我还没有阅读所有的代码。您的修改表单
函数中可能缺少$scope.$apply()
?只是一种感觉…正如我看到的,你读了一个文件,所以这可能是同步问题