在Angular中,无法访问控制器中的作用域变量
Unable to access scope variable inside a controller in Angular
我的代码有问题。在我的应用程序中,我有两个控制器,一个是加载所有数据,第二个是显示一个选项卡。
设置如下:
<div class="row" ng-app="quotation_list">
<div class="col-md-12" ng-controller="quoteList">
<section ng-controller="PanelController as panel">
<div class="panel pane-default" ng-show="panel.isSelected(1)">
...
<div class="row">
<div class="form-group">
<label>VAT(%): </label>
<input type="number" class="form-control text-right" ng-model="vat_rate" />
</div>
</div>
<button class="btn btn-default" type="button" ng-click="computePercentage()">TEST VALUE</button>
</div>
</section>
</div>
</div>
我试图得到模型的值vat_rate但我得到的是未定义值
这是我的函数:
var quotationList = angular.module('quotation_list', ['jsonFormatter','ui.bootstrap','ckeditor']);
quotationList.controller('quoteList', function($scope, $http) {
//some codes ...
$scope.computePercentage = function() {
console.log($scope.vat_rate);
}
});
我不知道我的错误在哪里。还有一个问题如果我在控制器中创建一个控制器可以吗?就像我做的那样?
好了,我希望你能帮助我。:)
可以在控制器中创建控制器
<body ng-controller="firstController">
<span>{{scopeinFirstController}}</span>
<div ng-controller="secondController">
<span>{{scopeinSecondController}}</span>
<div ng-controller="lastController">
<span>{{scopeinlastController}}</span>
</div>
</div>
</body>
正如我在评论中指出的那样,您在这里混合了样式,这使得难以在正确的范围内访问您的属性。另外,因为你的属性是一个没有预先赋值的原始值,而不是对象,所以它会受到JavaScript原型继承问题的影响。
以下是我建议如何重构外部控制器以使用controller as
,简化控制器,并使您的属性属于哪个控制器变得明显。这有一个额外的好处,即自动执行关于原型继承的"点规则"。
var quotationList = angular.module('quotation_list',
['jsonFormatter','ui.bootstrap','ckeditor']);
quotationList.controller('quoteListController', function($http) {
var quoteList = this; //store a reference to this for easy use
//some codes ...
quoteList.computePercentage = function() {
console.log(quoteList.vat_rate);
}
});
和HTML:
<div class="row" ng-app="quotation_list">
<div class="col-md-12" ng-controller="quoteListController as quoteList">
<section ng-controller="PanelController as panel">
<div class="panel pane-default" ng-show="panel.isSelected(1)">
...
<div class="row">
<div class="form-group">
<label>VAT(%): </label>
<input type="number" class="form-control text-right" ng-model="quoteList.vat_rate" />
</div>
</div>
<button class="btn btn-default" type="button" ng-click="quoteList.computePercentage()">TEST VALUE</button>
</div>
</section>
</div>
</div>
相关文章:
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 从指令链接函数监视控制器作用域
- 控制器作用域变量在刷新之前未加载
- AngularJS:如何在指令范围的对象发生变化时更新与控制器作用域相关联的控制器作用域
- ng-click 指令不调用控制器作用域中定义的函数
- 如何从2级指令访问控制器作用域
- 角度指令控制器作用域继承
- 触发指令AngularJs的控制器作用域
- Angularjs-在路由更改时刷新控制器作用域
- 访问父指令's子指令中的控制器作用域变量
- 将Angular Service对象绑定到控制器作用域并更新
- UI引导日期选择器不调用内联控制器作用域上的函数
- 将变量从控制器作用域传递到指令
- 工厂中与控制器作用域绑定的已修改数据不会更新
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 如何在angular 1.4.5+中操纵指令中的控制器作用域
- AngularJS:在两个具有隔离作用域的指令之间共享一个控制器作用域
- 如何将控制器作用域变量传递给angular.元素在头部元素中追加子元素时
- AngularJS+Jasmine -在指令中写入一个控制器作用域
- 如何从嵌入式D3脚本中访问Angular控制器作用域