使用templateUrl会破坏我的代码,但使用内联模板会起作用。为什么?

时间:2016-09-15 12:01:49

标签: javascript angularjs plunker plnkr.co

好的,我在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解析为未定义。

为什么会这样?我猜测从网址中获取模板是异步操作,但它不应该对开发人员产生影响。我浪费了几个小时的时间试图找出造成这种情况的原因。感谢。

0 个答案:

没有答案