2017-08-22 12 views
0

を:計算さプロパティknockout.jsで

function Person() { 
    this.firstName = ko.observable('Foo') 
    this.lastName = ko.observable('Bar') 
    this.fullName = ko.pureComputed(() => { 
     return this.firstName() + this.lastName() 
    }) 
} 

var p = new Person() 
console.log(p.fullName()) // FooBar 

Vueのコンポーネントデータないオブジェクトに反応計算されたプロパティを追加する方法はありますか?

+1

Vue.jsで 'computed'プロパティを試しましたか? –

+0

@MuthuKumaran私はコンポーネントの計算されたプロパティを認識しています。普通のオブジェクトにも作成できますか? – Johan

+0

なぜですか?あなたは何を達成しようとしていますか? Vueが本当に自分のライフサイクルとプロパティに関心を持っているのを見て、私はそうは思わない** **この機能を提供する** – Phil

答えて

0

Vueでは、ノックアウトのような反応性のあるプロパティとメソッドを明示的に宣言する必要はありません。すべてが単なる単純なオブジェクトです。

実際にVueでオブジェクトを無効にするのは、そのコンポーネントのdataオブジェクトで宣言されているプロパティを通じてコン​​ポーネントに割り当てたときです。

だから、Vueの中にあなたの例は、単に次のようになります。

function Person() { 
    this.firstName = 'Foo'; 
    this.lastName = 'Bar'; 
    this.fullName = function() { 
    return this.firstName + this.lastName; 
    }; 
} 

var p = new Person(); 
console.log(p.fullName()); // FooBar 

あなたはコンポーネント内部でそれを使用する場合、それは、反応性になり、次のように:

const comp = new Vue({ 
    template: '<div>{{ person.fullName() }}</div>', 
    data: { 
    person: null, 
    }, 
}); 

// Vue detects that p is being assigned to the reactive property 
// 'person' and makes p reactive. 
comp.person = p; 

私は私は、言及する必要がありますなぜなら、まず何かを反応的にしたい理由は、それがコンポーネントのテンプレートにレンダリングされ、そのコンポーネントが次のコンポーネントにレンダリングされたいからです。なぜなら、Vueのコンポーネントデータではないことです。プロパティが変更されたときに自動的に再描画されるので、実際にはそうすることはできませんVueの外部からの反応性がある。

「Vueコンポーネントのデータまたは計算プロパティ内で直接指定する必要なしに、Vueに反応するものを作成するにはどうすればよいですか」という質問を理解しました。 personプロパティは、そのプロパティ(およびそれに割り当てられたすべてのデータ)が反応するように、コンポーネントのdataで事前に宣言する必要があります。あなたがそれを行う限り、あなたはあなたが望むようにあなたのモデルオブジェクトを設計することができます。

+0

あなたの答えをありがとう。私は詳しく説明します。私はVuexに保存しているデータベースのエンティティのリストを持っています。私は 'Vue.set'を使ってプロパティを変更すると依存関係の検出/反応を引き起こすことを知っています。しかし、私が知る限り、計算されたプロパティをエンティティに追加する方法はありません。 'FullName'を作成し、反応させます。または私は何かを逃していますか? – Johan

+0

各オブジェクトに 'FullName'メソッドを追加することも、[' Object.defineProperty']でgetterプロパティを定義することもできます(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/Object/defineProperty)。 –

+0

ありがとう、それは私が不思議に思ったものです:) – Johan

関連する問題