角参考#vs ngModel

时间:2018-07-23 15:34:06

标签: angular angular-ngmodel angular-template-variable

我想知道什么时候我必须在输入中使用[[ngModel)],什么时候才可以使用#reference 例如

Traceback (most recent call last):
  File "/Users/me/anaconda3/envs/nlp/lib/python3.6/site-packages/nltk/corpus/reader/framenet.py", line 1308, in frame_by_name
    elt = XMLCorpusView(locpath, 'frame')[0]
  File "/Users/me/anaconda3/envs/nlp/lib/python3.6/site-packages/nltk/corpus/reader/xmldocs.py", line 155, in __init__
    encoding = self._detect_encoding(fileid)
  File "/Users/me/anaconda3/envs/nlp/lib/python3.6/site-packages/nltk/corpus/reader/xmldocs.py", line 166, in _detect_encoding
    with open(fileid, 'rb') as infile:
NotADirectoryError: [Errno 20] Not a directory: '/Users/me/nltk_data/corpora/framenet_v17.zip/framenet_v17/frame/Abandonment.xml'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/me/anaconda3/envs/nlp/lib/python3.6/site-packages/nltk/corpus/reader/framenet.py", line 876, in __repr__
    for elt in self:
  File "/Users/me/anaconda3/envs/nlp/lib/python3.6/site-packages/nltk/collections.py", line 406, in iterate_from
    try: yield self._func(self._lists[0][index])
  File "/Users/me/anaconda3/envs/nlp/lib/python3.6/site-packages/nltk/corpus/reader/framenet.py", line 1407, in frame
    f = self.frame_by_id(fn_fid_or_fname, ignorekeys)
  File "/Users/me/anaconda3/envs/nlp/lib/python3.6/site-packages/nltk/corpus/reader/framenet.py", line 1268, in frame_by_id
    return self.frame_by_name(name, ignorekeys, check_cache=False)
  File "/Users/me/anaconda3/envs/nlp/lib/python3.6/site-packages/nltk/corpus/reader/framenet.py", line 1310, in frame_by_name
    raise FramenetError('Unknown frame: {0}'.format(fn_fname))
nltk.corpus.reader.framenet.FramenetError: Unknown frame: Abandonment

我应该在这里这样做吗,或者我可以改为这样:

<div class="form-group">
  <div class="input-group mb-2">
    <input type="text" class="form-control" [(ngModel)]="newUser">
    <button class="btn btn-outline-success" (click)="onAddUser()">Add user</button>
  </div>
</div>

如果有任何答复,我将不胜感激

4 个答案:

答案 0 :(得分:0)

这是两个不同的概念:

NgModel

  

根据域模型创建一个FormControl实例,并将其绑定到   表单控制元素。

template reference variable

  

(...)通常是对模板中DOM元素的引用。它可以   也是对Angular组件或指令或Web的引用   零件。 (...)

它们的用法完全不同,这取决于您的用例。

例如,如果您想在整个HTML的其余部分中使用var引用某些模型(ngModel),则可以这样做:

<div class="form-group">
  <div class="input-group mb-2">
    <input type="text" class="form-control" [(ngModel)]="newUser" #newUser="ngModel">
    <button class="btn btn-outline-success" (click)="onAddUser()">Add user</button>
  </div>
</div>

现在,您可以在HTML中使用#newUser进行某种形式的验证,等等。

答案 1 :(得分:0)

来自Documentation

  • add_action( 'template_redirect', 'thankyou_custom_payment_redirect'); function thankyou_custom_payment_redirect(){ if ( is_wc_endpoint_url( 'order-received' ) ) { global $wp; // Get the order ID $order_id = intval( str_replace( 'checkout/order-received/', '', $wp->request ) ); // Get an instance of the WC_Order object $order = wc_get_order( $order_id ); // Set HERE your Payment Gateway ID if( $order->get_payment_method() == 'cheque' ){ // Set HERE your custom URL path wp_redirect( home_url( '/custom-page/' ) ); exit(); // always exit } } } 允许您将模板元素的值绑定到组件变量。
  • [(ngModel)]:可以在模板中的任何位置引用

总而言之,ngModel引用变量的值,而#引用引用模板对象(HTML元素)。 但是,您仍然可以使用ViewChild访问模板引用变量。

我认为您编写的示例都是正确的。如果我需要在组件中使用该值,则最好使用ngModel;如果在DOM中需要它,则最好使用#。

答案 2 :(得分:0)

您从未没有使用[(ngModel)]NgModel是Angular FormsModule的一部分。如果导入了FormsModule,则可以使用ngModel的附加功能。这样做会创建NgFormFormControl,您可以将其以更复杂的反应形式和动态形式使用,并跟踪字段的状态,例如肮脏,感动。它还将使您能够在字段上放置错误验证器,并公开可观察到的值更改流。

使用模板变量和ViewChild来捕获输入元素并进行交互,就像使用普通JS一样,也很好,尤其是在用例很简单的情况下。这样,您可以避免在模块中包含FormsModule

答案 3 :(得分:0)

对于简单的双向绑定(组件和模板之间)[(ngModel)] 可能更可取,但通过本地引用,我们可以使用 any 任何元素的属性(如果需要),而不仅仅是输入元素的