Qual é a diferença entre vm. $ Set e Vue.set?

Li e reli cuidadosamente os documentos do Vue"Reatividade em profundidade" e a API paravm. $ set eVue.set mas ainda estou tendo dificuldades para determinar quando usar qual. É importante que eu seja capaz de distinguir entre os dois porque, no meu projeto atual do Laravel, estamos definindo muitas propriedades dinamicamente nos objetos.

A distinção nos documentos parece estar entre o idioma que vm. $ Set é "For Vue instance", enquanto Vue.set é "For plain data objects" e que Vue.set é global:

No entanto, existem maneiras de adicionar uma propriedade e torná-la reativa após a criação de uma instância.

Para instâncias do Vue, você pode usar o método da instância $ set (path, value):

vm.$set('b', 2)
// `vm.b` and `data.b` are now reactive

Para objetos de dados simples, você pode usar o método global Vue.set (objeto, chave, valor):

Vue.set(data, 'c', 3)
// `vm.c` and `data.c` are now reactive

Por fim, fiquei pensando se a terceira "opção" de fazer o acima (que é para adicionar várias propriedades ao mesmo tempo) poderia ser usada como um substituto equivalente para qualquer uma das 2 opções acima (adicionando apenas uma propriedade em vez de várias) ?

Às vezes, você pode atribuir várias propriedades a um objeto existente, por exemplo, usando Object.assign () ou _.extend (). No entanto, novas propriedades adicionadas ao objeto não acionarão alterações. Nesses casos, crie um objeto novo com propriedades do objeto original e do objeto mixin:

// instead of `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

questionAnswers(1)

yourAnswerToTheQuestion