我刚刚接管了我们angularjs应用程序的前端工作,但我被卡住了。
我一直在创建指令来替换臃肿的 html,以使更新前端看起来更容易。一切都很顺利,直到我点击我们选举应用程序的投票页面。
指令传递参数(无工作(
<div block-container header="vm.electionToVote.name" startrow="'false'">
<div block-container header="'vm.electionToVote.name'" startrow="'false'">
<div block-container header="{{vm.electionToVote.name}}" startrow="'false'">
通常这些工作
<div block-container header="'Elections List'">
<div block-container header="vm.full.title" startrow="'false'">
指令 HTML <h3>{{style.header}}</h3>
命令
.directive('blockContainer', blockContainer);
/* @ngInject */
function blockContainer() {
var directive = {
scope: {
header: '=',
startrow: '='
},
replace: true,
transclude: true,
controller: blockContainerCtrl,
controllerAs: 'style',
templateUrl: 'app/style/directives/blockContainer.tpl.html',
restrict: 'A'
};
return directive;
function blockContainerCtrl($scope) {
//debugger;
var vm = this;
vm.header = $scope.header;
vm.startrow = angular.isDefined($scope.startrow) ? $scope.startrow : 'true';
}
}
运行调试显示vm.electionToVote是未定义的,但ng-inspector显示它有东西(id,名称,结束日期等(屏幕截图:https://i.stack.imgur.com/lXn5U.png
您可以在此处查看所有(包括选举(文件:https://plnkr.co/edit/bPVp8QY0xzlJ6aWZoRDi?p=preview
我真的是一个 angualjs 初学者,但有了谷歌、stackoverflow 和大量的反复试验,我正在完成工作......有点...
任何其他提示/建议也将不胜感激
由于您在 HTML 上使用style.header
来绑定 HTML 上的header
值,因此您应该在指令中添加bindToController: true
,以便所有隔离的作用域绑定都将在指令 html 中可用。
命令
var directive = {
scope: {
header: '=',
startrow : '='
},
replace: true,
transclude: true,
controller: blockContainerCtrl,
controllerAs: 'style',
templateUrl: 'app/style/directives/blockContainer.tpl.html',
restrict: 'A',
bindToController: true //<-- Added this line
};
指令用法
<div block-container header="vm.electionToVote.name" startrow="'false'">
此外,您不应该在控制器内手动进行header
和startrow
变量分配。删除这两个分配部分将使其正常工作。