在Angular2的指令或组件中使@HostBinding和@HostListener成为条件

时间:2016-11-23 15:53:51

标签: angular angular2-directives angular2-components

我有一个接受事件的指令:

<td calendarEvent [event]=event><td>

在指令中,我有HostBinding个用于根据事件添加类,HostListener用于监听mouseentermouseleave个事件。例如:

@HostBinding('class.all-day') get eventIsAllDay() {
  if (this.event) return this.event.is_all_day;
}

<td>输入的undefined[event] HostBinding。有没有办法根据条件添加HostListener<td>?在每次更改检测时,它必须为每个 public class UserLoginTask extends AsyncTask<Void, Void, Boolean> { private final String mEmail; private final String mPassword; private boolean loginResult; String errorMessage; UserLoginTask(String email, String password) { mEmail = email; mPassword = password; } @Override protected Boolean doInBackground(Void... params) { Stormpath.login(mEmail, mPassword, new StormpathCallback<Void>() { @Override public void onSuccess(Void aVoid) { Log.d("debug", "sucess"); loginResult = true; } @Override public void onFailure(StormpathError error) { errorMessage = error.message(); Log.d("debug", "Error: " + error.message()); loginResult = false; } }); return loginResult; } @Override protected void onPostExecute(final Boolean success) { mAuthTask = null; showProgress(false); if (success) { finish(); } else { Toast.makeText(LoginActivity.this, errorMessage, Toast.LENGTH_SHORT).show(); mPasswordView.setError(getString(R.string.error_incorrect_password)); mPasswordView.requestFocus(); } } @Override protected void onCancelled() { mAuthTask = null; showProgress(false); } } 标记运行所有绑定和侦听器,甚至是那些没有事件的标记。也许所需的计算能力可以忽略不计,但每一点点都有助于我确定,特别是对于移动设备。

1 个答案:

答案 0 :(得分:3)

无法有条件地添加这些内容。

您可以使用属性并绑定到该属性。使用属性进行更改检测比使用函数或getter更有效。

@HostBinding('class.all-day') 
eventIsAllDay:boolean = false;

set event(val) {
  this.event.is_all_day === val;
}