【发布时间】:2016-11-30 16:30:13
【问题描述】:
所以,我的问题是这样的:
我有一个使用过两次的组件,它定义了一个模板。
组件:
.component('topList', {
template: '<div class="well"> \
<div class="title"> \
<h3>{{$ctrl.model.title}}</h3><a href="#" class="close"><i class="ss-delete"></i></a> \
</div> \
<div ng-repeat="i in $ctrl.model.items" class="list-question"> \
<div class="item"><span class="number">{{$index + 1}}</span> \
<div class="description"> \
<h4>{{(i.Count/ $ctrl.model.total)*100 | number:2}}% ({{i.Count}} de {{ $ctrl.model.total }})</h4> \
<p>{{i.Description}}</p> \
</div> \
</div> \
</div> \
</div>',
controller: TopListController,
bindings: {
model: '='
}
})
function TopListController() {
}
控制器:
.controller('myController', function ($http, $scope, $controller, datesService) {
var ctrl = this;
$scope.api = function () {
var date = datesService.getDates();
$http.get("apicall/date.from/date.to").then(function (response) {
ctrl.model = {
title: 'Title',
items: response.data.Items,
total: response.data.Total
};
});
}
$http.get("apicall/date1/date2").then(function (response) {
ctrl.model = {
title: 'Title',
items: response.data.Items,
total: response.data.Total
};
});
})
HTML(实际上是翡翠):
div(ng-controller="myController as controller")
top-list(model="controller.model")
当页面加载时,组件填充了来自在创建控制器时调用的方法 $http.get 的数据,但是当我从 html 调用方法 api() 时,数据不会改变。
我正在从另一个控制器调用方法 api()。
【问题讨论】:
-
您在控制器内部将
controllerAs与$scope混合在一起,因此您可能会感到困惑。理想情况下,您应该放置在控制器上下文中 (this)。然后你可以调用像ng-click="$ctrl.api()"这样的方法 -
我不明白,我忘了提到我从另一个控制器调用方法 api。
-
你能解释一下“从另一个控制器调用方法api”部分吗?你的意思是没有从控制器对应的模板中调用api方法?
-
是的,这个方法是从另一个控制器调用的,它控制两个输入,在本例中是两个日期,API 请求获取一个包含这些天之间发生的信息的 json。我需要更新这个组件的信息。
标签: angularjs controller components