Angularjs 未在指令内部调用控制器函数

Angularjs 未在指令内部调用控制器函数,angularjs,angularjs-directive,callback,angularjs-controller,Angularjs,Angularjs Directive,Callback,Angularjs Controller,我有一个控制器函数,不能在指令内调用它。我正在努力。还有什么我没有做的吗?请告诉我。我在这里包括了我的代码。我搜索了很多地方,找到了很多答案,现在我被困在了这个问题上 (函数(){ var app=angular.module(“featureModule”,['ngRoute']); // 应用指令('myGoogleAutocomplete',函数(){ 返回{ 替换:正确, 要求:'ngModel', 范围:{ ngModel:“=”, googleModel:“=”, onSelect

我有一个控制器函数,不能在指令内调用它。我正在努力。还有什么我没有做的吗?请告诉我。我在这里包括了我的代码。我搜索了很多地方,找到了很多答案,现在我被困在了这个问题上

(函数(){
var app=angular.module(“featureModule”,['ngRoute']);
//
应用指令('myGoogleAutocomplete',函数(){
返回{
替换:正确,
要求:'ngModel',
范围:{
ngModel:“=”,
googleModel:“=”,
onSelect:“&?”,//已成功选择的可选回调:“onPostedBid(googleModel)”
},
模板:“”,
链接:函数($scope、element、attrs、model)
{
var autocomplete=new google.maps.places.autocomplete(元素[0],谷歌选项);
google.maps.event.addListener(自动完成,'place\u changed',函数(){
$scope.$apply(函数(){
var place=autocomplete.getPlace();
如果(!place.geometry)
{
//用户输入了未建议的地点名称,然后按Enter键,或者地点详细信息请求失败。
型号:$setValidity('place',false);
//log(“没有可供输入的详细信息:“+place.name+””);
返回;
}
$scope.googleModel={};
$scope.googleModel.placeId=place.place\u id;
$scope.googleModel.latitude=place.geometry.location.lat();
$scope.googleModel.longitude=place.geometry.location.lng();
$scope.googleModel.formattedAddress=place.formatted\u地址;
if(位置、地址和组件){
$scope.googleModel.address=[
$scope.extract(place.address_组件,'route'),
$scope.extract(place.address\u组件,“街道号”)
].加入(“”);
}
模型.$setViewValue(element.val());
型号:$setValidity('place',true);
如果(属性onSelect)
{ 
//如何在这里调用控制器函数?
$scope.onSelect({$item:$scope.googleModel});
}
});
});
}
}
});
app.controller(“featureController”、函数($scope、$http、$rootScope、close、ModalService、NgMap){
log($rootScope.permService);
$scope.onSelect=函数(val)
{
控制台日志(val);
}
});

控制器中没有onSelectGoogleAddress()函数。我只看到onSelect()函数。更改html中传递的select值

 <my-google-autocomplete id="address"  name="address" ng-model="task.house_no" google-model="model.googleAddress"
            on-select="onSelect($item)" autocomplete="off" required>
          </my-google-autocomplete>

控制器中没有onSelectGoogleAddress()函数。我只看到onSelect()函数。更改html中传递的select值

 <my-google-autocomplete id="address"  name="address" ng-model="task.house_no" google-model="model.googleAddress"
            on-select="onSelect($item)" autocomplete="off" required>
          </my-google-autocomplete>

您可以使用elemet内部的链接函数绑定回调事件

这是一个例子,希望对你有所帮助

让控制器具有来自指令的回调函数,如下所示

  app.controller('MainCtrl', function($scope) {
   $scope.SayHello=function(id){
        alert(id);
   }
 });
让指令

app.directive('dirDemo', function () {
    return {
    scope: {
        okCallback: '&'
    },
    template: '<input type="button" value="Click me" >',
        link: function (scope, element, attrs) {

    var param='from directive';

         element.bind('click', function () {
            scope.$apply(function () {
                scope.okCallback({id:param});
            });
        });
       }
      }
    });
app.directive('dirDemo',function(){
返回{
范围:{
okCallback:“&”
},
模板:“”,
链接:函数(范围、元素、属性){
var param='from指令';
元素绑定('单击',函数(){
作用域:$apply(函数(){
okCallback({id:param});
});
});
}
}
});
HTML是

 <body ng-controller="MainCtrl">
   <div dir-demo
        ok-callback="SayHello(id)"
   </div>
 </body>


您可以使用elemet内部link函数绑定回调事件

这是一个例子,希望对你有所帮助

让控制器具有来自指令的回调函数,如下所示

  app.controller('MainCtrl', function($scope) {
   $scope.SayHello=function(id){
        alert(id);
   }
 });
让指令

app.directive('dirDemo', function () {
    return {
    scope: {
        okCallback: '&'
    },
    template: '<input type="button" value="Click me" >',
        link: function (scope, element, attrs) {

    var param='from directive';

         element.bind('click', function () {
            scope.$apply(function () {
                scope.okCallback({id:param});
            });
        });
       }
      }
    });
app.directive('dirDemo',function(){
返回{
范围:{
okCallback:“&”
},
模板:“”,
链接:函数(范围、元素、属性){
var param='from指令';
元素绑定('单击',函数(){
作用域:$apply(函数(){
okCallback({id:param});
});
});
}
}
});
HTML是

 <body ng-controller="MainCtrl">
   <div dir-demo
        ok-callback="SayHello(id)"
   </div>
 </body>