[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)

Passar parametros entre Props

[Concluído]

Roberto Noya
Criador Roberto Noya 05/03/2020

 

Olá Professor,

Eu tenho a seguinte situação no meu projeto de VuejS com Laravel

Existe uma tabela chamada “partners” e existe uma tabela chamada “collaborators”.

Para cadastrar o “collaborator” preciso do “id” da tabela “partner”. 

Estou no cadastro de Colaborador onde o FORM recebe através de “props” o parâmetro “partner_id” e além disso o objeto "collaborator" que virá do Componente Pai.

Minha dúvida é como conseguirei passar o parâmetro “partner_id” para o objeto “collaborator” ?

Estou usando Vuex e ao passar os parametros para inserir o registro preciso passar o partner_id.

 props: {
        partner_id: {
            required: true,
        },

        collaborator: {
            required: false,
            default: () => {
                return {
                    id: '',
                    nome: '',
                    partner_id: ''
                }
            }
        }
    },

 

 

Criador Roberto Noya 05/03/2020

O projeto esta no git

https://github.com/robertotnoya/financiamento

Voce vai notar que não cosigo passar o parametro partner_id para o vuex mesmo usando watch

Roberto Noya
Manager Carlos Ferreira 05/03/2020

Olá, Roberto!
Tudo bem?

Esse exemplo está qual component mesmo? Vou dá uma olhada onde está errando.

Carlos Ferreira
Criador Roberto Noya 05/03/2020

Esta dentro de partners.

Dentro de partners é possível cadastrar os collaborators.

Criei esse e exemplo para aprenser como trabalhar com dois forms distintos na mesma página.

O componente EditPartnerComponent (components\backend\pages\partners) inclui o FormCollaboratorComponent.

No vuex de collaborator eu criei um alert so para visualizar o parametro partner_id que não aparece.

 

 

 

 

Roberto Noya
Criador Roberto Noya 05/03/2020

Outro ponto, eu gostaria que ao efetuar o store do colaborador volta-se para a tela do parceiro escolhido.

No momento ao cadastrar um parceiro está voltando para a lista de parceiros.

this.$router.push({name: 'admin.partners'})

Eu preciso que volte para tela do parceiro escolhido

this.$router.push({name: 'admin.partners.edit', params: {id: response.data.id}})

Não estou conseguindo direcionar para a tela correta.

 

 

 

Roberto Noya
Manager Carlos Ferreira 05/03/2020

 Olá Roberto!

Como essa operação é algo especifica desses dois components, não tem a necessidade de levar para o Vuex.

--------------

Vi que no component EditPartnerComponent.vue você está usando o FormCollaboratorComponent.vue:
<collaborator :partnerid="partner.id"></collaborator>

Não entendi muito bem a ideia. O objetivo desse FormCollaboratorComponent.vue não seria incluir um novo collaborator ao partner?
Se sim, porque está recebendo também como props o collaborator? É porque pretende utilizar esse mesmo component para editar também?

Carlos Ferreira
Manager Carlos Ferreira 05/03/2020

Essa lógica aqui teoricamente está correta, está gerando algum erro? Se sim me dê mais detalhes.
this.$router.push({name: 'admin.partners.edit', params: {id: response.data.id}})

Você tem esse valor aqui?
response.data.id

Carlos Ferreira
Criador Roberto Noya 05/03/2020

Eu gostaria de ao cadastrar o parceiro o sistema voltar para rota de edição do parceiro.

 

Se voce olhar o arquivo

(resources/js/components/backend/pages/partners/partials/FormPartnerComponent.vue) vai notar que eu tento realizar esse redirecionamento (this.$router.push({name: 'admin.partners.edit', params: {id: response.data.id}}))

 

const action = this.updating ? 'updatePartner' : 'storePartner'             

            this.$store.dispatch(action, this.partner)

                        .then(() => {

                            this.$router.push({name: 'admin.partners.edit', params: {id: response.data.id}})  

                            this.$snotify.success('Cadastro efetuado com sucesso')

                        })

                        .catch(error => {

                            this.$snotify.error('Erro no cadastro')

                            //this.errors = error.response.data.errors

                        })

 

 

Não ocorre erros e o Store ocorre sem problemas

 

No arquivo VUEX (resources/js/vuex/modules/partners/partners.js) 

storePartner (context, params) {

            context.commit('PRELOADER', true)

            return new Promise((resolve, reject) => {

                axios.post(`${URL_BASE}${RESOURCE}`, params)

                    .then(response => resolve(response.data))

                    .catch(error => reject(error))

                    .finally(() => context.commit('PRELOADER', false))    

            })

 

        }, 

 

 

Roberto Noya
Criador Roberto Noya 05/03/2020

Voce pode pegar o exemplo da sua aula VUEX + Laravel  onde voce cadastra a categoria. Só que em vez de listar as categorias apos o INSERT retorna para a tela de edição da categoria cadastrada 

Roberto Noya
Manager Carlos Ferreira 05/03/2020

Certo, entendi.

Mas, isso daqui está retornando o id correto?
response.data.id

console.log(response)

Gera algum erro? Se sim, qual?

Carlos Ferreira
Criador Roberto Noya 05/03/2020

Olá Carlos,

Finalmente consegui resolver o problema referente ao redirecionamento após a inserção de um registro no caso um parceiro (partner)

Também resolvi a questão dos colaboradores.

O que eu queria e consegui fazer foi a criação dos dos partners e collaborators dentro de TABS.

Quando é cadastrado um parceiro que fica dentro de uma tab, assim que ocorre o INSERT ele abre outra tab com o form dos collaborators.

Tudo isso ma mesma URL http://financiamento.local/api/v1/partners/{id: no caso de edição}

Eu não queria abrir um tela separada só para a criação e edição de collaborators.

Acho que a navegabilidade ficou melhor pois o partner_id é informado automaticamente.

Vou deixar os links de tela para voce me entender:

http://ayontech.com.br/lixo/tela1.jpg

http://ayontech.com.br/lixo/tela2.jpg

Vou em frente no desenvolvimento desse sistema.  Aliás é meu primeiro sistema em VueJS. Ainda preciso seguir um longo caminho.

Falo aqui do Japão!

Aqui, como existe uma neura em relação ao corona virus não saio muito e aproveito para aprofundar meus estudos.

Esse é o lado bom dessa situação.

Abraços!

Roberto Noya
Manager Carlos Ferreira 05/03/2020

Opa amigo, que bom que conseguiu resolver, meus parabéns!!!

 

É realmente esse vírus está causando muito medo em todo o mundo, espero que se resolva logo.

Abs;

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!