我有两个不同视图使用的控制器:
<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
}
答案 0 :(得分: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
答案 1 :(得分: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 for $ element并改变你的测试来做类似的事情。