Javascript 如何在指令中使用ng change函数?

Javascript 如何在指令中使用ng change函数?,javascript,angularjs,Javascript,Angularjs,我试图使自动完成,为此,我使用标签输入。指令名是我的指令,在控制器内我试图调用selectUser函数,但它不起作用 在自动完成中,您必须键入4个字母,如:john,然后我将显示选项 查看 <body ng-app="myApp" ng-controller="appCtrl"> <my-directive apipoint="customerApi" modeldisplay="tags.selected" ng-model="tags.selected" c

我试图使自动完成,为此,我使用标签输入。指令名是我的指令,在控制器内我试图调用
selectUser
函数,但它不起作用


在自动完成中,您必须键入4个字母,如:john,然后我将显示选项

查看

  <body ng-app="myApp" ng-controller="appCtrl">
    <my-directive  apipoint="customerApi" modeldisplay="tags.selected"  ng-model="tags.selected" change="selectUser(tags.selected)"></my-directive>
  </body>
指令

app.directive("myDirective", ['$http',function($http){
  return {
    restrict: "E",
    template : 'Here Use tag-input: <tags-input ng-model="modeldisplay"'+
     'ng-change="change(modeldisplay)">'+
     '<auto-complete source="loadTags($query)"></auto-complete>'+
     '</tags-input>',
    require: 'ngModel',
    scope : {
      modeldisplay: "=",
      apipoint: "="
    },
    link : function(scope, element, attrs, ctrl){
      scope.loadTags = function(query) {
         return $http.get(scope.apipoint[0]);
      };
      scope.change = function(item){
        ctrl.$setViewValue(item);
      }
    }
  };
}]);
app.directive(“myDirective”、['$http',函数($http){
返回{
限制:“E”,
模板:“此处使用标记输入:”+
"


还有一件事是我的方法,我是对的,背后的原因是,在Angularjs视图中,我想使用自动完成指令oneline,我想将其作为通用方法…

您需要这样的方法吗

指令变更:

link: function(scope, element, attrs, ctrl) {
  scope.loadTags = function(query) {
    return $http.get(scope.apipoint[0]);
  };
  scope.updateModel = function(item) {
    ctrl.$setViewValue(item);
  };
},
controller: ['$scope', function($scope) {
  $scope.$watch('modeldisplay', function(newVal) {
    $scope.updateModel(newVal);
  });
}],
如果您需要更多解释,请阅读以下内容:


你需要这样的东西吗

指令变更:

link: function(scope, element, attrs, ctrl) {
  scope.loadTags = function(query) {
    return $http.get(scope.apipoint[0]);
  };
  scope.updateModel = function(item) {
    ctrl.$setViewValue(item);
  };
},
controller: ['$scope', function($scope) {
  $scope.$watch('modeldisplay', function(newVal) {
    $scope.updateModel(newVal);
  });
}],
如果您需要更多解释,请阅读以下内容:


运行控制器功能时应进行的一些更改

这是正在工作的plunker

  • 您使用的第三方指令不提供ng更改。是的,但它在tag added=“change1(modeldisplay)
  • 上提供了
    。因此
    ng更改
    不起作用

  • 您已经通过了您的
    my指令的change属性中的函数
    ,并且您的指令范围中再次出现了另一个change函数,这造成了误解

  • 您使用作用域访问传递的函数,但在指令隔离作用域中未提及。这就是在指令作用域中无法访问传递的函数的原因


  • 运行控制器功能时应进行的一些更改

    这是正在工作的plunker

  • 您使用的第三方指令不提供ng更改。是的,但它在tag added=“change1(modeldisplay)
  • 上提供了
    。因此
    ng更改
    不起作用

  • 您已经通过了您的
    my指令的change属性中的函数
    ,并且您的指令范围中再次出现了另一个change函数,这造成了误解

  • 您使用作用域访问传递的函数,但在指令隔离作用域中未提及。这就是在指令作用域中无法访问传递的函数的原因



  • 在自动完成中,您必须键入4个字母,如:john,然后我将显示选项..您需要在
    scope.change中调用传递的函数,使用
    $scope.$apply(函数)
    -
    scope.change=function(项){$scope.$apply(项())}
    @Anita,谢谢你的回复,我没有收到,你能详细说明一下吗?@Anita不工作..我已经对你做了更改,plunker在回答中添加了plunker链接。如果你不清楚,请留言。在自动完成中,你必须键入4个字母,如:john,然后我将显示选项..你需要在
    scope.ch中调用传递的函数使用
    $scope.$apply(函数)
    -
    scope.change=function(item){$scope.$apply(item())}
    @Anita,谢谢你的回复,我没有收到,你能详细说明一下吗?@Anita不工作..我已经对你做了更改,plunker在回答中添加了plunker链接。如果你有什么不清楚的地方,请发表评论。另外请阅读:正如我看到的,ngTagsInput没有任何ng更改属性,这就是为什么你需要在指令控制中进行范围监视的原因谢谢这是我在寻找的,你能告诉我为什么我不能调用ng change吗…正如我在前面的评论中所写的,ngTagsInput没有任何ng change属性,所以你不能在这个属性上绑定你自己的函数,因为它不存在。你也没有在指令范围属性中绑定你的
    change
    函数,所以这也是一个问题,因为在本例中,您调用了一个未定义的函数。我的方法正确与否,原因是我只想在Angularjs视图中联机…再一次,您建议的演示,函数“$scope.selectUser”只调用了一次。请阅读以下内容:ngTagsInput没有我看到的任何ng change属性,这就是原因你需要在你的指令控制器中进行范围监视。谢谢这是我正在寻找的,你能告诉我为什么我不能调用ng change…正如我在前面的评论中所写的,ngTagsInput没有任何ng change属性,因此你不能在这个属性上绑定你自己的函数,因为它不存在。你也没有绑定你的
    更改e> 指令作用域属性中的函数,所以这也是一个问题,因为在本例中,您调用了一个未定义的函数。我的方法正确与否,原因是我只想在Angularjs视图中联机…再一次,您建议的演示,函数“$scope.selectUser”只调用了一次。您能告诉我,我的方法正确吗背后的原因是,在Angularjs视图中,我想使用自动完成指令单线,我想将其作为通用方法…你能告诉我,我的方法对吗?背后的原因是,在Angularjs视图中,我想使用自动完成指令单线,我想将其作为通用方法。。。