Javascript 在AngularJS中将数据从单击的项目传递到控制器
我正在尝试遵循一种方法,用户可以单击Javascript 在AngularJS中将数据从单击的项目传递到控制器,javascript,html,angularjs,Javascript,Html,Angularjs,我正在尝试遵循一种方法,用户可以单击项目,编辑它,然后最终能够保存更改 该示例使用了ng repeat和我所研究的所有其他方法,以确定我现在所在的位置,我使用的是从路由文件夹中的resolve命令传递的数据 $stateProvider .state('app.patents.patent', { url: '/{patentId}', component: 'patent', resolve: { patent: ['p
项目,编辑它,然后最终能够保存更改
该示例使用了ng repeat
和我所研究的所有其他方法,以确定我现在所在的位置,我使用的是从路由文件夹中的resolve命令传递的数据
$stateProvider
.state('app.patents.patent', {
url: '/{patentId}',
component: 'patent',
resolve: {
patent: ['patents', '$stateParams', function(patents, $stateParams) {
return patents.find(function(patent){
return patent.id == $stateParams.patentId;
})
}]
}
})
}]);
我尝试使用数据id
(查看),但没有成功,因为我假设您不能两次使用同一id,并且我所需的功能需要两个元素ng show
和ng hide
,具体取决于传递给它们的布尔值
我现在处于一种困惑的状态,不知道该采取哪种方法
问题
如何调整不使用ng repeat
的代码来处理此问题?或者你知道我可以采取另一种方法来达到同样的效果吗
<tr>
<th class="text-xs-right">Short Name</th>
<td>
<span data-id="123" ng-hide="$ctrl.shortTitle.editing" ng-dblclick="$ctrl.editItem(123)">{{$ctrl.patent.shortTitle}}</span>
<input type="text" data-id="123" ng-show="$ctrl.shortTitles.editing" ng-blur="$ctrl.doneEditing(123)" ng-model="$ctrl.patent.shortTitle"></input>
</td>
</tr>
angular.module('myApp').component('patent', {
templateUrl: 'p3sweb/app/components/patents/views/patent-item.htm',
controller: function() {
var vm = this;
vm.editItem = function (item) {
item.editing = true;
}
vm.doneEditing = function (item) {
item.editing = false;
};
});
简称
{{$ctrl.patent.shortTitle}
角度。模块('myApp')。组件('patent'{
templateUrl:'p3sweb/app/components/patents/views/patent item.htm',
控制器:函数(){
var vm=这个;
vm.editItem=函数(项){
item.editing=true;
}
vm.doneEditing=函数(项){
item.editing=false;
};
});
根据我对您问题的理解,我已经创建了一个JSFIDLE,请看一看,或者您可以创建一个包含您所面临问题的JSFIDLE,以便更好地理解
双击以下项目进行编辑:
添加项
{{item.name}
您可以创建一个数组,将每个输入连接到从0开始的特定索引,然后将该索引传递给函数调用
<tr>
<th class="text-xs-right">Short Name</th>
<td>
<span ng-hide="$ctrl.editing[1]" ng-dblclick="$ctrl.editItem(1)">{{$ctrl.patent.shortTitle}}</span>
<input type="text" data-id="123" ng-show="$ctrl.editing[1]" ng-blur="$ctrl.doneEditing(1)" ng-model="$ctrl.patent.shortTitle"></input>
</td>
</tr>
angular.module('myApp').component('patent', {
templateUrl: 'p3sweb/app/components/patents/views/patent-item.htm',
controller: function() {
var vm = this;
vm.editing=[];
vm.editItem = function (index) {
vm.editing[index] = true;
}
vm.doneEditing = function (index) {
vm.editing[index] = false;
};
});
简称
{{$ctrl.patent.shortTitle}
角度。模块('myApp')。组件('patent'{
templateUrl:'p3sweb/app/components/patents/views/patent item.htm',
控制器:函数(){
var vm=这个;
vm.editing=[];
vm.editItem=函数(索引){
vm.editing[index]=true;
}
vm.doneEditing=函数(索引){
vm.editing[index]=false;
};
});
演示:您正在使用ng repeat在您的视图中填充数据,为什么要删除它?我的视图中没有使用ng repeat。我有一个表需要一些对象属性和值,所以只需将特定数据绑定到必要的元素。只需更新问题以澄清这一点,谢谢,尽管我无法访问这是你的小提琴吗?
%20http的服务器DNS地址找不到。
谢谢你的时间@Harpeet和示例!错误:ReferenceError:index没有定义。$index
会不起作用吗?我的错,我忘了更改函数参数的名称。已经更新了它。现在项没有定义。慢慢地,哈哈。我添加了vm
,无错误但无响应He..检查plunker并相应更新您的数据结构命名。已再次更新。刚刚意识到要删除对象属性名称。谢谢@Vivz,您已经帮助我几次了!
<tr>
<th class="text-xs-right">Short Name</th>
<td>
<span ng-hide="$ctrl.editing[1]" ng-dblclick="$ctrl.editItem(1)">{{$ctrl.patent.shortTitle}}</span>
<input type="text" data-id="123" ng-show="$ctrl.editing[1]" ng-blur="$ctrl.doneEditing(1)" ng-model="$ctrl.patent.shortTitle"></input>
</td>
</tr>
angular.module('myApp').component('patent', {
templateUrl: 'p3sweb/app/components/patents/views/patent-item.htm',
controller: function() {
var vm = this;
vm.editing=[];
vm.editItem = function (index) {
vm.editing[index] = true;
}
vm.doneEditing = function (index) {
vm.editing[index] = false;
};
});