使用Angular和Observables构建Flash消息服务

时间:2018-04-17 07:57:18

标签: angular rxjs observable

我正在尝试在我的Angular 5项目中创建一个服务,该服务将处理向用户显示的flash消息。我很高兴使用由HttpClient之类的东西创建的observable,但我从来没有理解如何创建和使用我自己的。

似乎逻辑路径是在服务上公开一个Observable,一个UI组件在发出时订阅并显示来自所述observable的数据,并且应用程序的其他部分可以发送消息可观察的。

我可以订阅可观察和显示数据,但是如何设置一个可观察到的被发送数据?我是否正确地采取了这种方式?

到目前为止,我的努力是使用W,但这似乎不起作用。以下简化代码。

package com.example.sourabhkumargupta.blood_donor;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class signup_form extends AppCompatActivity {

     private DatabaseHelper databaseHelper;
     Spinner dropdown;
     Button form_submit;
     EditText name,email,password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup_form);
        dropdown = (Spinner) findViewById(R.id.dropdown);
        String[] items = new String[]{"select Blood Group","A-","A+","B-","B+"};
        final ArrayAdapter adapter = new ArrayAdapter<>(this,android.R.layout.simple_spinner_dropdown_item,items);
        dropdown.setAdapter(adapter);
        name = (EditText) findViewById(R.id.name);
        email = (EditText) findViewById(R.id.email);
        password = (EditText) findViewById(R.id.password);


        form_submit = (Button) findViewById(R.id.form_submit);
        final DatabaseHelper databaseHelper = new DatabaseHelper(this);
        form_submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            boolean result = databaseHelper.insertData(name.getText().toString(),email.getText().toString(),
                    dropdown.toString(),password.getText().toString());
            if(result==true)
                Toast.makeText(signup_form.this,"Added",Toast.LENGTH_SHORT);
            else
                Toast.makeText(signup_form.this,"Fail",Toast.LENGTH_SHORT);

            }
        });
    }
}

不会抛出任何错误,但订阅者似乎没有收到已发送的消息。

1 个答案:

答案 0 :(得分:1)

解决!我的代码实际上是正确的,但发送消息的组件位于不同的模块中(设置了不同的提供程序),所以 - 我认为 - 多个服务(以及可观察的)并行运行。发件人和订阅者都没有收听同一个观察者。

TL; DR,请确保您不会多次提供Flash服务!在我的顶层模块提供它对我来说足够了。