0

2つの異なるビューで使用される1つのコントローラーがあります。

<div ng-controller="MyCtrl" ng-include="slice = false">
    <span ng-repeat="value in values">{{ value }}</span>
</div>
...
<span ng-controller="MyCtrl">
    <div ng-repeat="value in values">{{ value }}</div>
</span>

コントローラー:

var MyCtrl = function($scope){
    $scope.values =  ['a','fancy','array'];
    // if called from span
    //$scope.values =  ['a','fancy','array'].slice(2);
}

コントローラーの動作を変更するためにコントローラーが呼び出されている要素を検出できるかどうかを知りたいのですが。

更新: @ matys84plの回答に基づいて、これが私の新しいコントローラーです

MenuCtrl = function($scope) {
    $scope.slice = true;
    if($scope.slice === false) { // wont go inside 
        $scope.data = ['a','fancy','array'];
    } else {
        $scope.data = ['a','fancy','array'].slice(2);
    }
    console.log($scope.slice); // still true for both
}
4

2 に答える 2

1

ルールは、コントローラーがビューを認識してはならないということです...したがって、代わりに、次のようにngInitを使用してビューからコントローラーに何かを渡す必要があります。

<div ng-controller="MyCtrl">
    <span ng-repeat="value in values">{{ value }}</span>
</div>
...
<span ng-controller="MyCtrl" ng-init="isDifferent = true">
    <div ng-repeat="value in values">{{ value }}</div>
</span>

次に、コントローラーでisDifferent値を確認します。

更新:実例のあるプランカー: http://plnkr.co/edit/zUgLSQcAaZX5j6JBoQAO

于 2013-01-15T12:07:33.967 に答える
0
<div ng-controller="MyCtrl" behavior=2>...

私の怠惰なjsを許してください-私はコーヒースクリプトに慣れています

var MyCtrl = function($scope, $attrs){
    if $attrs.behavior != 2
        $scope.values =  ['a','fancy','array'];
    else
        $scope.values =  ['a','fancy','array'].slice(2);
}

$attrsを$elementに交換し、テストを変更することで、同様のことができると思います。

于 2013-02-07T23:15:41.583 に答える