2016-09-08 12 views
2

私は自分の会社でこのパターンに遭遇しましたが、未定義のプロパティを独自のスコープで子ディレクティブに渡すという指示があります次に定義され(通常、子の範囲でプロパティを使用する)、後で親だけでなく、親の他の子によっても使用されます。私は子供のスコープへのすべての種類の参照があるので、これで何をするかについて私の頭脳をかき鳴らしています。子どもによって定義される未定義の関数を渡す不思議な角パターン

これは良いパターンですか?一般?私はそれが悪いように感じますが、私はかなり角度があり、それを呼び出すことを躊躇しています。

<parent> 
    <child-one function="foo"></child-one> 
    <child-two function="foo"></child-two> 
</parent> 

親だけでfooへのrefまたはchildTwoディレクティブはそれを呼び出すようになり、定義がchildOneのディレクティブです。 「シングル責任」:

.directive('parent', [function() { 
    return { 
    link: function ($scope) { 
     $scope.someOtherFunction = function() { 
     $scope.foo(); 
     } 
    } 
    }; 
}]) 

.directive('childOne', [function() { 
    return { 
    scope: { foo: '=' }, 
    link: function ($scope) { 
     $scope.foo = function() { 
     // do something 
     } 
    } 
    }; 
}]) 

.directive('childTwo', [function() { 
    return { 
    scope: { foo: '=' }, 
    link: function ($scope) { 
     $scope.someTotallyDifferentFunction = function() { 
     $scope.foo(); 
     } 
    } 
    }; 
}]) 
+1

本当に悪です。双方向バインディングは、動作ではなくスコープ間でデータを渡すためのものです。適切な実装は 'foo'が何をするかに依存しますが、もっとも、それは' = 'を酷使してはいけません。 – estus

答えて

2

これは、具体的には、第1の1の共通mispracticeであり、それはSOLID priciplesの一部に違反するので、避けるべきです。なぜ兄弟は別の兄弟の機能を使う必要があるのですか?両方の機能を共有する場合は、両方に利用可能な「共通」ライブラリに存在する必要があります。

関連する問題