0

我有一个控制器被两个不同的视图使用:

<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 值。

更新:带有工作示例的 plunker:http ://plnkr.co/edit/zUgLSQcAaZX5j6JBoQAO

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

请原谅我懒惰的js——我习惯了coffeescript

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 回答