今天,我在angularjs中看到了一个错误:
当您尝试直接在ng-click中设置范围值时,当ng-click在ng-if中测试相同的范围值时,它不起作用 - > http://jsfiddle.net/9j2TL/26 /
angular.module('test', [])
.controller('testCtrl', function($scope) {
$scope.step = 1;
$scope.setStep = function(step) {
$scope.step = step;
};
});
<div ng-app="test">
<div ng-controller="testCtrl">
<ul class="timeline">
<li>
<div class="block-submit">
<button class="btn btn-primary btn-lg" ng-click="step = 2">Without ngif block</button>
</div>
</li>
<li ng-if="step > 1">
<div class="block-submit">
<button class="btn btn-primary btn-lg" ng-click="step = 3">with ngif block</button>
</div>
</li>
<li ng-if="step > 1">
<div class="block-submit">
<button class="btn btn-primary btn-lg" ng-click="setStep(3)">With ngif block and scope function</button>
</div>
</li>
</ul>
<p>
step value : {{ step }}
</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
要解决它,你应该创建一个范围函数......
如果有人对这个问题有解释,我很乐意理解它!
谢谢 :)
Dav*_*yon 27
我不认为这是一个错误.您只是在视图中自动创建属性和混淆范围.
这确实有效:
<li ng-if="step > 1">
<div class="block-submit">
<button class="btn btn-primary btn-lg" ng-click="$parent.step = 3">with ngif block</button>
</div>
</li>
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为self内部ng-if正在创建一个新的范围.
这是不是一个错误,我认为"NG-如果"创建了一个自己的范围,所以当你在这里:"步长= 3",你创建和比你的控制器单独范围分配这个变量
<li ng-if="step > 1">
<div class="block-submit">
<button class="btn btn-primary btn-lg" ng-click="step = 3">with ngif block</button>
</div>
</li>
Run Code Online (Sandbox Code Playgroud)
在这里你仍然在一个单独的范围内但是当你调用一个函数时,可能angular会在你的范围内寻找这个函数,但是当angular找不到它时,它会在你的父范围中寻找函数,并在找到它时,它将分配给您的步骤父范围变量,这就是为什么它在这里工作而不是在上面的代码中.
<li ng-if="step > 1">
<div class="block-submit">
<button class="btn btn-primary btn-lg" ng-click="setStep(3)">With ngif block and scope function</button>
</div>
</li>
Run Code Online (Sandbox Code Playgroud)
我认为这是正在发生的事情,如果有人能证实它会很棒!
| 归档时间: |
|
| 查看次数: |
20725 次 |
| 最近记录: |