扩展 UI-Router-Tabs 以显示表单验证状态
Extending UI-Router-Tabs To Display Form Validation State
我是 Angular 的新手,在弄清楚如何将数据服务的值绑定到我创建的 https://github.com/rpocklin/ui-router-tabs 项目的自定义项时遇到了问题。
自定义是在选项卡标题中显示一个图标,该图标根据相应 ui-view 的验证状态进行切换。我已经连接了一个数据服务,该服务在验证成功或失败时更新,并且呈现选项卡的控制器正在绑定 "seen"。
当我尝试将此值作为 "options" 传递到选项卡数据时出现问题。值 change/icon 切换未在验证状态更改时处理。如果我将 hard-coded "true" 传递到选项卡数据中,则会显示所需的图标。
vm.tabs = [
{
heading: "View 1",
route: "manage.view1",
options: {
status: vm.stateService.getForm1State()
}
},
{
heading: "View 2",
disable: vm.disableTabs,
route: "manage.view2",
options:{
status: true
}
}
];
这似乎不是那么困难的事情,所以我想我只是遗漏了一些关于范围界定的明显内容。这是一个演示问题的 plunk http://plnkr.co/edit/iefvwcffSZmpfy83NGde?p=preview。
注意:应标记为 ui-router-tabs,但我缺乏创建标记的声誉。
问题出在这里:
options: {
status: vm.stateService.getForm1State()
}
由于 stateService.getForm1State()
return 是一个布尔值,该值将被复制并分配为 status
属性.
的值
因此,当此代码执行一次时,例如:
options: {
status: false
}
options
对象不会对 stateService
中的任何更改做出反应。
一个简单的解决方案是 stateService.getForm1State()
return 一个对象。
例如:
function stateService() {
var form1IsValid = {
status: false
};
return {
getForm1State: getForm1State,
setForm1State: setForm1State
};
function getForm1State() {
return form1IsValid;
}
function setForm1State(newValue) {
form1IsValid.status = newValue;
return;
}
然后使 options
对象引用同一个对象:
options: vm.stateService.getForm1State()
现在只要你有:
options.status
它将与:
相同
vm.stateService.getForm1State().status
并且它会正确反映更改。
我是 Angular 的新手,在弄清楚如何将数据服务的值绑定到我创建的 https://github.com/rpocklin/ui-router-tabs 项目的自定义项时遇到了问题。
自定义是在选项卡标题中显示一个图标,该图标根据相应 ui-view 的验证状态进行切换。我已经连接了一个数据服务,该服务在验证成功或失败时更新,并且呈现选项卡的控制器正在绑定 "seen"。
当我尝试将此值作为 "options" 传递到选项卡数据时出现问题。值 change/icon 切换未在验证状态更改时处理。如果我将 hard-coded "true" 传递到选项卡数据中,则会显示所需的图标。
vm.tabs = [
{
heading: "View 1",
route: "manage.view1",
options: {
status: vm.stateService.getForm1State()
}
},
{
heading: "View 2",
disable: vm.disableTabs,
route: "manage.view2",
options:{
status: true
}
}
];
这似乎不是那么困难的事情,所以我想我只是遗漏了一些关于范围界定的明显内容。这是一个演示问题的 plunk http://plnkr.co/edit/iefvwcffSZmpfy83NGde?p=preview。
注意:应标记为 ui-router-tabs,但我缺乏创建标记的声誉。
问题出在这里:
options: {
status: vm.stateService.getForm1State()
}
由于 stateService.getForm1State()
return 是一个布尔值,该值将被复制并分配为 status
属性.
因此,当此代码执行一次时,例如:
options: {
status: false
}
options
对象不会对 stateService
中的任何更改做出反应。
一个简单的解决方案是 stateService.getForm1State()
return 一个对象。
例如:
function stateService() {
var form1IsValid = {
status: false
};
return {
getForm1State: getForm1State,
setForm1State: setForm1State
};
function getForm1State() {
return form1IsValid;
}
function setForm1State(newValue) {
form1IsValid.status = newValue;
return;
}
然后使 options
对象引用同一个对象:
options: vm.stateService.getForm1State()
现在只要你有:
options.status
它将与:
相同vm.stateService.getForm1State().status
并且它会正确反映更改。