好的,我在SO上看过类似的问题,但仍然不了解这个问题。
我有一个使用ngModelController的日期输入指令。我有另一个指令,你可以传递模型控制器,它检查模型是否有错误,并为元素设置适当的类。
所以标记看起来像这样:
fn init<'a>(matches: getopts::Matches) {
let in_port: &mut Read = match matches.opt_str("i") {
Some(filename) => &mut File::open(filename).expect("Couldn't open input file.") as &mut Read,
_ => &mut io::stdin() as &mut Read,
};
let out_port: &mut Write = match matches.opt_str("o") {
Some(filename) => &mut File::create(filename).expect("Couln't open output file") as &mut Write,
_ => &mut io::stdout() as &mut Write,
};
run(in_port, out_port);
}
由于我们在表单内部有 date-input ,并且它具有 name 属性和 ng-model ,因此ngModelController将是以 date 的名称添加到 myForm ,这正是我们传递给 class-validation 指令。
现在的问题是,如果我使用templateUrl作为 date-input 指令, class-validation 指令会收到 undefined 。但是当我使用内联模板时,一切都按预期工作。
这是一个完全展示问题的Plunker。 http://plnkr.co/edit/Cygawxjp4WN9xRbTEXWU?p=preview
注释掉第41行并取消注释script.js中的第42行以查看问题。验证不起作用,如果您打开浏览器控制台,您会发现 class-validation 将myForm.date解析为未定义。
为什么会这样?我猜测从网址中获取模板是异步操作,但它不应该对开发人员产生影响。我浪费了几个小时的时间试图找出造成这种情况的原因。感谢。