2017-01-25 3 views
0

私は、以下の指令が正しく機能するのは、含まれる要素でng-ifを使用しない限りです。私がしようとしているのは、関連する関数を持つスコープの動的プロパティを設定するだけです。スコープにはプロパティが含まれていません(未定義)。指令がng-ifで動作しない

どのような助けが素晴らしいでしょう!

app.directive('stRefresh', function() { 
    return { 
     require: '^stTable', 
     link: function (scope, ele, attr, ctrl) { 
      if (attr.stRefresh) { 
       var name = attr.stRefresh; 
       scope[name] = scope[name] || {}; 
       scope[name].refresh = function() { 
        return ctrl.search(); 
       }; 
      } 
     } 
    } 
}); 
+0

間違っていることを説明できますか – dmoo

+0

スコープにはプロパティが含まれていません(未定義) – Marco

+0

ng-ifを使用している特定の理由により、ng-showは全体的に高速で、問題を解決する可能性があります。 – dmoo

答えて

2

動作しません知っていると便利だろうが、私はあなたがthe problem of nested scopesに噛まれていると思われます。

ng-ifディレクティブは、子スコープを作成します。ディレクティブのスコープを変更する場合:

scope[name] = scope[name] || {}; 

子スコープを変更しています。プロトタイプの継承のため、これは親のスコープを変更しません。したがって、親スコープに変更が反映されることを期待している場合は、そのスコープは表示されません。

解決するには、スコープ参照にドットを追加する必要があります。このようなもの:

scope.data[name] = scope.data[name] || {}; 
scope.data[name].refresh = function() { 
    return ctrl.search(); 
}; 

scope.dataプロパティは、オブジェクトへの参照である必要があります。参照を変更していないので、親スコープと子スコープの両方からそのオブジェクトのプロパティを変更できます。

+0

ありがとうございます。 – Marco

関連する問題