Javascript 绑定到控制器的AngularJS指令
我想弄清楚AngularJS的指令。下面是一个我正在尝试做的事情的示例 正如您在示例中看到的,我希望Javascript 绑定到控制器的AngularJS指令,javascript,angularjs,angularjs-directive,angularjs-bindings,Javascript,Angularjs,Angularjs Directive,Angularjs Bindings,我想弄清楚AngularJS的指令。下面是一个我正在尝试做的事情的示例 正如您在示例中看到的,我希望vm.alsoId变量等于vm.theId。在模板中,vm.theId显示正确的值,但vm.alsoId不显示 我做错了什么?我怎样才能实现我的目标 如果有帮助,最终的想法是执行以下内容: function directive(service) { var vm = this; vm.entity = null; init(); function init() { se
vm.alsoId
变量等于vm.theId
。在模板中,vm.theId
显示正确的值,但vm.alsoId
不显示
我做错了什么?我怎样才能实现我的目标
如果有帮助,最终的想法是执行以下内容:
function directive(service) {
var vm = this;
vm.entity = null;
init();
function init() {
service.getEntity(vm.theId).then(function (entity) {
vm.entity = entity;
});
}
}
Angular建议“仅当您希望将API公开给其他指令时”绑定控制器。否则,请使用链接 下面是一个使用link函数的工作实例
angular.module('app', [])
.directive('directive', directive);
angular.element(function() {
angular.bootstrap(document, ['app']);
});
function directive() {
return {
restrict: 'E',
scope: {
theId: '<'
},
template: `
alsoId: <span ng-bind="alsoId"></span>
theId: <span ng-bind="theId"></span>`,
link: link
};
}
function link(scope, element, attrs) {
init();
function init() {
scope.alsoId = scope.theId;
}
}
angular.module('app',[])
.指令(“指令”,指令);
元素(函数(){
引导(文档,['app']);
});
函数指令(){
返回{
限制:'E',
范围:{
theId:“正如您所注意到的,bindToController
绑定在控制器的构造函数中不是立即可用的(不同于$scope
,后者是)。您正在寻找的是Angular 1.5:Lifecycle Hooks引入的功能,特别是$onInit
您的想法是正确的;只需按如下方式替换init
函数定义和调用:
vm.$onInit = function () {
service.getEntity(vm.theId).then(function (entity) {
vm.entity = entity;
});
};
和。
(或者,如果没有此解决方案,您将需要一个手表)vm.theId在您将其分配给vm.alsoId时未初始化为任何值。这里演示了这一点:Angular不推荐任何类似的东西(它是一个框架,毕竟没有自己的意见)。此引号来自何处?这是一个过时的观点,被Angular 1.5.和bindToController对象取代。这是Angular 2更容易迁移的里程碑。这些引号表明我直接引用了Angular文档(请参阅)。搜索“最佳实践:当您想向其他指令公开API时,请使用控制器。否则,请使用链接。”。"它以粗体突出显示。我不同意这是一个过时的观点,Angular 2迁移与此问题无关。这非常相关,因为迁移成为1.5及更高版本中框架更改的优先事项。您发布的引用自《泰晤士报》一开始就在手册中,早在BindToControl出现之前很久r、 使用老派风格是一个品味问题,但请不要在回答中建议它作为正确的做事方式,因为它不是。2017年,$scope和link已经过时。