Javascript 在单击按钮之前,编译文本绑定不会显示
我有一个简单的web应用程序,它按用户的名字和居住的城市列出用户。 当用户单击其名称或城市时,元素将被两个输入元素替换。一个是名字,第二个是他们居住的城市。输入元素将帮助用户更新他们的名字和城市。简单的AngularJS指令DOM操作 我遇到的问题是,当有人单击name或city元素时,绑定文本不会显示在输入元素中,直到您单击myinfo指令中的saveupdate按钮 这是HTML:Javascript 在单击按钮之前,编译文本绑定不会显示,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我有一个简单的web应用程序,它按用户的名字和居住的城市列出用户。 当用户单击其名称或城市时,元素将被两个输入元素替换。一个是名字,第二个是他们居住的城市。输入元素将帮助用户更新他们的名字和城市。简单的AngularJS指令DOM操作 我遇到的问题是,当有人单击name或city元素时,绑定文本不会显示在输入元素中,直到您单击myinfo指令中的saveupdate按钮 这是HTML: <!DOCTYPE HTML> <html id="ng-app" ng-app="app"
<!DOCTYPE HTML>
<html id="ng-app" ng-app="app">
<head>
<meta charset="UTF-8">
<title>JS</title>
</head>
<body>
<div ng-controller="UserController">
<div>
Search:
<input placeholder="search customers" data-ng-model="name" />
</div>
<div >
<h4>Customers</h4>
<ul>
<li ng-repeat="cust in customers | filter:name" >
<!-- My Info Directive -->
<info update="updateCustomer(this)" name="cust.name" city="cust.city"></info>
</li>
</ul>
</div>
<div>
Name: <input type="text" ng-model="newCustomer.name" /><br />
City: <input type="text" ng-model="newCustomer.city" /><br />
<button ng-click="addCustomer()" >Add New Customer</button>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
JS
搜索:
客户
-
名称:
城市:
添加新客户
这是JavaScript(main.js):
var-app=angular.module(“app”,[])
.controller('UserController',function ControllerOne($scope){
$scope.customers=[
{名称:“米洛”,城市:“伦敦”},
{姓名:“约翰”,城市:“纽约”},
{名称:“阿尔弗雷德”,城市:“奥斯陆”}
];
$scope.addCustomer=函数(){
$scope.customers.push({name:$scope.newCustomer.name,city:$scope.newCustomer.city});
$scope.newCustomer.name=$scope.newCustomer.city=“”;
};
$scope.updateCustomer=函数(ele){
控制台日志(“名称:+ele.Name+”城市:+ele.City);
}
})
.directive(“info”,函数($compile){
返回{
限制:“E”,
范围:{
名称:“=”,
城市:“=”,
更新:“&”
},
模板:“{name}}-{{city}”,
链接:函数(范围、元素、属性){
元素绑定(“单击”,函数(){
var html=“保存更新”;
var dataScoped=$compile(html)(范围);
元素。替换为(数据范围);
});
}
}
});
单击
事件是异步的。这意味着您的范围不知道模型更改。只需将这两行代码包起来:
var dataScoped = $compile(html)(scope);
element.replaceWith(dataScoped);
具有范围。$apply
:
scope.$apply(function(){
var dataScoped = $compile(html)(scope);
element.replaceWith(dataScoped);
});
工作:解决了问题。谢谢!我是否按照指令中的正确方式进行DOM操作?这是正确的角度方式吗?@milo我会把它放在一个模板中,就像:
template:“{{name}}-{city}
scope.$apply(function(){
var dataScoped = $compile(html)(scope);
element.replaceWith(dataScoped);
});