我试图在窗体上添加一个简单的“切换”。如果我点击一个按钮,那么我应该激活一个相应命名的部分,否则应该隐藏视图。我的问题似乎是范围之一。如果我没有在子步骤中使用隔离范围,那么这两个子步骤在一个切换点上将显示为激活状态,而在另一个子切换点上处于非激活状态(这是不正确的行为)。如果我做使用一个孤立的范围,然后isActive()
永远不会被调用。ng-show没有按预期方式绑定
我的代码如下。
<div ng-controller='SubstepCtrl'>
<button activates='CreateNewMeter'>
Create new Meter
</button>
<button activates='UseExistingMeter'>
Use Existing Meter
</button>
<div class='sub-step' substep='CreateNewMeter' ng-show='isActive(name)'>
<h1>Create New Meter</h1>
</div>
<div class='sub-step' substep='UseExistingMeter' ng-show='isActive(name)'>
<h1>Use Existing Meter</h1>
</div>
</div>
角:
.controller('SubstepCtrl', function($scope) {
$scope.activeSubstepName = undefined;
$scope.isActive = function(name) {
return $scope.activeSubstepName == name;
};
})
.directive('activates', function() {
return {
link: function($scope, $element, $attrs) {
$element.on('click', function() {
$scope.activeSubstepName = $attrs.activates;
$scope.$apply();
});
}
};
})
.directive('substep', function() {
return {
link: function($scope, $element, $attrs) {
$scope.name = $attrs.substep;
}
};
});
我设法在使用jQuery相当哈克的方式来实现这一点,但我不知道是否有一种方式来角IFY它。
预期的行为是,如果我点击“创建新仪表”按钮,应该显示“CreateNewMeter”子步骤,并且“UseExistingMeter”不应该显示。据我了解这里的问题是子步骤div不创建一个子范围,都使用父范围 - 因此名称是未定义的 - 对吗?
如果是这样,我该如何补救?
对不起,是的,我跳过了这一点。但是它在实际代码中是$ scope.activeSubstepName。 – 2014-09-29 13:23:14
您的子步骤指令将控制器中的$ scope.name设置为页面上最后一个子步骤元素的名称,这就是为什么您看到它们都显示出来(它们都使用相同的“标志”) – JoseM 2014-09-29 13:26:25
您需要传递名称妥善.. http://plnkr.co/edit/2KowNF?p =预览You'r子步骤只使用控制器范围,因此范围中的name属性将被指令的最后一个实例覆盖。 – PSL 2014-09-29 13:27:43