2017-02-16 8 views
1

コントローラ内で "as vm"構文を使用しています。私は、あるデータ構造を一時的なものにコピーするためにangular.copy()を使用します。角括弧{}内でangular.copy()が動作しません。

angular.copy(vm.data, vm.tempData = []) 

しかし、このコードをテンプレートビューに移動したいので、コントローラの関数呼び出しに頼る必要はありません。これは、コードを書き直すと、コントローラのコードも書き換える必要がないためです。

{{vm.temp = []}}       //works 
{{vm.temp = vm.data}}      //works 
{{vm.temp = angular.copy([])}}   //does not work 
{{vm.temp = angular.copy(vm.data)}}  //does not work, I need this or 
{{angular.copy(vm.data, vm.temp = [])}} //does not work, I need this 

私は間違っていますか?

+0

であなたは間違っている文字列補間内部の何かをコピーしようとしている、あなたは、イベントがコピー – Yaser

+0

は、なぜあなたは今までanythを行う必要がありますトリガーするようにあなたの完全なコードを提供する必要がありますこのような見方で?このようなビジネスはコントローラーに属します – charlietfl

+0

ビジネスは便利です。 {{}}やng-initでangular.copyにアクセスしたいが、できない。 –

答えて

1

このロジックはコントローラーで実行する必要があります。これはコントローラーのためです。しかしangular docs on expressionsから、あなたの質問に答えるために:

Context: JavaScript expressions are evaluated against the global window. In AngularJS, expressions are evaluated against a scope object

をあなたの表現で$scopeオブジェクトの下angular定義を探すためにしようとしていることを意味します。だから、あなたがやりたいことには、次のようにコントローラでこれを行う必要があります:

$scope.angular = angular; 
+0

長いエラーメッセージが表示される:未知のエラー:[$ rootScope:infdig] http://errors.angularjs.org/1.4.6/$rootScope/infdig?p0=10&p1=%5B%5B%7B%22 [ ...] これは、ng-repeatがさらにダウンしたように見えます。それはangular.copyがうまくコピーされたようです。 –

0

私の回避策:、NG-initであなたのhtml内にない呼び出してラッパー関数

vm.copy = function (item1, item2) { 
    return angular.copy(item1, item2); 
}; 

を作成{{}}

ng-init="vm.copy(vm.data, vm.tempData = [])" 
関連する問題