Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 绑定到控制器的AngularJS指令_Javascript_Angularjs_Angularjs Directive_Angularjs Bindings - Fatal编程技术网

Javascript 绑定到控制器的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

我想弄清楚AngularJS的指令。下面是一个我正在尝试做的事情的示例

正如您在示例中看到的,我希望
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已经过时。