【发布时间】:2016-10-17 11:45:33
【问题描述】:
我正在学习创建自定义角度指令,我想在其中使用一些双向数据绑定;但是没有运气。
想法非常简单:我们有一个人员列表,一旦我选择其中任何一个,我想在我的指令中显示所选人员的姓名(详细信息)。
在我粘贴大量代码之前,这是我的示例 plunker:
https://plnkr.co/edit/xQJAWcYcscOaaNs8VlAI?p=preview
这是我所做的:
创建主控制器:
(function() {
"use strict";
var controllerId = 'personController';
angular.module("app").controller(controllerId, ["$timeout", personController]);
function personController($timeout) {
var vm = this;
vm.name = "Janko";
vm.people = returnPeople();
vm.selectedPerson = {};
vm.selectPerson = function (person) {
//function to add a new Person
vm.selectedPerson = person;
console.log(vm.selectedPerson.name);
};
}
function returnPeople() {
return [
{
name: "Janko",
surname: "Hrasko",
age: 24,
gender: "M"
},
{
name: "Jozef",
surname: "Mrkvicka",
age: 26,
gender: "M"
},
{
name: "Janka",
surname: "Kratka",
age: 21,
gender: "F"
}
];
};
})();
已创建指令:
(function () {
"use strict";
var app = angular.module("app");
app.directive('personDetail', personDetail);
function personDetail() {
return {
scope: {
person: "=person"
},
restrict: 'E',
templateUrl: '/js/person/templates/personDetail.html'
}
};
})();
**创建的人物细节控制器:**
(function() {
"use strict";
var controllerId = 'personDetail';
angular.module("app").controller(controllerId, ["$scope", personController]);
function personController($scope) {
var vm = this;
vm.person = $scope.person;
}
})();
最后 - person Detail.html
<div ng-controller="personDetail as vm">
<h3>Selected Name:</h3>
<h3>{{vm.person.name}}</h3>
</div>
不幸的是,数据绑定不起作用,即使我可以看到该项目已被选中。我在这里做错了什么?
编辑:
您的所有答案都已从我的personDetail.html 中删除了 ng-controller,但我想保留它(目前它只包含一个小绑定,但我想在那里添加更多功能,例如按钮点击等)。
是否可以保留控制器?
【问题讨论】:
标签: angularjs data-binding angular-directive