角度.js第二个控制器不工作
Angular.js second controller does not work.
我有以下HTML文件:
<!DOCTYPE html>
<html ng-app="store">
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>
<script type="text/javascript" src="app.js"></script>
</head>
<body ng-controller="storeController as store">
<ul class="list-group">
<li class="list-group-item" ng-repeat="product in store.product">
<h3>
{{product.name}}
<em class="pull-right"> {{product.price | currency}}</em>
</h3>
<section ng-controller="tabController as tabCtrl">
<ul class="nav nav-pills">
<li ng-class="{active:tab===1}"> <a href ng-click="tabCtrl.setTab(1)"> Description</a> </li>
<li ng-class="{active:tab===2}"> <a href ng-click="tab =2"> Reviews</a> </li>
<li ng-class="{active:tab===3}"> <a href ng-click="tab =3"> Specs</a> </li>
</ul>
<div class="panel" ng-show="tab === 1">
<h4> Description</h4>
<p>{{product.description}}</p>
</div>
<div class="panel" ng-show="tab === 2">
<h4> Reviews</h4>
<blockquote>Not yet</blockquote>
</div>
<div class="panel" ng-show="tab === 3">
<h4> Specifications</h4>
<blockquote>Not yet</blockquote>
</div>
</section>
</li>
</ul>
</body>
</html>
这是具有角度模块和控制器的应用程序.js :
(function(){
var app = angular.module("store",[]);
var gem = [
{
name: "Dodec",
price: 2.95,
canPurchase: true,
soldOut: false
},
{
name: "Panta",
price: 20.4,
canPurchase: true,
soldOut: false
}
];
app.controller("storeController",function(){
this.product = gem;
});
app.controller("tabController",function(){
this.tab = 1;
this.SetTab = function(value){
this.tab = value;
};
});
})();
问题是HTML没有读取第二个控制器tabController,因此this.tab = 1没有将tab初始化为1,setTab函数也不起作用。
请帮忙,我做错了什么?
这不是一个"答案",而是使用"this"时的最佳实践。您可能希望将"this"初始化为变量,并稍后在控制器中对其进行修改,以确保您在正确的范围内。
前任:
app.controller("storeController",function(){
var self = this;
self.product = gem;
});
app.controller("tabController",function(){
var self = this;
self.tab = 1;
self.SetTab = function(value){
self.tab = value;
};
});
现在,要解决这个问题,请尝试使用$scope而不是"this"
app.controller("storeController",function($scope){
$scope.product = gem;
});
app.controller("tabController",function($scope){
$scope.tab = 1;
$scope.SetTab = function(value){
$scope.tab = value;
};
});
问题很简单:这是您的ngClick
处理程序:
ng-click="tabCtrl.setTab(1)"
这就是您定义控制器功能的方式:
this.SetTab = function(value) {
this.tab = value;
};
请注意,在 javascript 中setTab
与 SetTab
不同。
另一个问题。如果您选择使用控制器作为语法,则还应修复 ngClass 和 ngShow 指令以使用控制器实例tab
属性,而不是$scope
属性:
ng-class="{active: tabCtrl.tab === 3}"
和
<div class="panel" ng-show="tabCtrl.tab === 2">
<h4>Reviews</h4>
<blockquote>Not yet</blockquote>
</div>
演示:http://plnkr.co/edit/8WOzHCuFaJzgSNTy5X0i?p=preview
相关文章:
- 为什么ng控制器不调用或工作或功能不工作
- AngularJS控制器不工作,为什么?(简单的控制器示例)
- 角度控制器功能赢得'不按指令工作
- console.log在角度控制器内不工作
- 角度控制器功能不;在指令内部调用时,似乎无法始终如一地工作
- 如何使Angular JS控制器与指令一起工作
- AngularApp中的多个控制器不工作
- 具有范围变量的控制器不工作
- 角度指令和属性Don'在控制器内创建和设置时无法工作
- AngularJS控制器没有'第一次刷新页面后无法工作
- 包含ngMock时控制器不工作
- 部分html视图's控制器未使用KendoPanelBar内容URL在指令模板URL中工作
- 在第三个控制器中使用时RootScope不工作
- angularJS-当我添加ngRoute时,控制器停止工作
- 角度控制器的作用是什么;t控制器'他的工作由指令来完成
- Typescript$inject$timeout到指令中..在控制器中工作,而不是在链接中
- AngularJS,第二个控制器不工作
- ng-显示无法从控制器工作
- 角度 js 控制器不工作
- AngularJS 1.3 路由不工作;控制器从未调用