Javascript 角度1.5.|单击子组件从父组件调用函数?

Javascript 角度1.5.|单击子组件从父组件调用函数?,javascript,angularjs,Javascript,Angularjs,在我的angular 1.5应用程序中,有两个组件。家长: angular. module('myApp'). component('myContainer', { bindings: { saySomething: '&' }, controller: ['$scope', function MyController($scope) { var containerCtrl = this; containerCtrl

在我的angular 1.5应用程序中,有两个组件。家长:

angular.
module('myApp').
component('myContainer', {
    bindings: {
        saySomething: '&'
    },
    controller: ['$scope', function MyController($scope) {
        var containerCtrl = this;
        containerCtrl.saySomething = function saySomething() {
            containerCtrl.sentence = "Hello, world";
            console.log(containerCtrl.sentence);
        };
    }]
});
还有一个孩子:

angular.
module('myApp').
component('myButton', {
    bindings: {
        onClick: '&'
    },
    template:
    '<div>' +
        '<a class="button" href="#">Say Something</a>' +
    '</div>'
}); 
angular。
模块('myApp')。
组件('myButton'{
绑定:{
onClick:“&”
},
模板:
'' +
'' +
''
}); 
这是我的index.html:

<my-container>
    <my-button ng-click="$ctrl.saySomething()"></my-button>
</my-container>

问题是:如何通过单击子组件中的按钮从父组件调用函数saySomething()?现在它不起作用了。我见过一个类似的问题,但这并没有解决我的问题。 提前感谢您的帮助


另外,如果有任何类似的问题,请告诉我。坦克

问题是,它只适用于单向绑定值

   mod.component('myCmp', {
      template: '<h1>{{$ctrl.name}}</h1>',
      bindings: {
        name: '<'
      },
      controller:  {
      this.$onChanges = function (changesObj) {
        if (changesObj.name) {
         ...fire some function
        }
      };
    }
    });
mod.component('myCmp'{
模板:{{$ctrl.name}},
绑定:{

名称:“您可以
在子组件中要求
父控制器,然后调用其方法

angular.module('demoApp', [])
  .component('myContainer', {
    ...
  })
  .component('myButton', {
    require: {
      parentCtrl: '^myContainer'
    },
    template: '<div>' +
      '<a class="button" href="#" ng-click="$ctrl.parentCtrl.saySomething()">Say Something</a>' +
      '</div>'
  });
angular.module('demoApp',[])
.组件(“myContainer”{
...
})
.component('myButton'{
要求:{
parentCtrl:“^myContainer”
},
模板:“”+
'' +
''
});
这里有一个


并链接到

我来晚了,但我认为有更好的方法来处理这个问题,这里有一个小例子:

(function() {
    var app = angular.module('app');
    app.component('reportPrintButton', {
        template: [
            '<button class="btn btn-info" ng-click="$ctrl.onClick()">',
                '<span class="glyphicon glyphicon-print"></span> {{ $ctrl.name }}',
            '</button>'
        ].join(''),
        bindings: {
            name: '@',
            onClick: '&'
        },
        controller: reportPrintButton
    });

    reportPrintButton.$inject = [];

    function reportPrintButton() {
        var ctrl = this;
    }
})();

// On view use it like this where in the on-click attribute use the function
// you want to trigger from parent component
<report-print-button name="Complete" on-click="printReport('Complete')">
</report-print-button>
(函数(){
var-app=角度。模块(“app”);
应用程序组件('reportPrintButton'{
模板:[
'',
“{{$ctrl.name}}”,
''
].加入(“”),
绑定:{
名称:“@”,
onClick:“&”
},
控制器:reportPrintButton
});
reportPrintButton.$inject=[];
函数reportPrintButton(){
var ctrl=this;
}
})();
//在视图中,像这样使用它,在单击属性中使用函数
//您希望从父组件触发

通常这种方法不起作用。您可以传递一个绑定变量,然后进行监视(或onchange)然后把火烧了function@elasticrash,谢谢你的回答,但是你能给出一个例子吗?或者一个例子的链接吗?你可以在子组件中要求父控制器,然后将子组件的调用重定向到子组件parent@AlekseyL.,谢谢你的回答,但你所说的“将电话从孩子转到家长”是什么意思?怎么做?谢谢你的回答,但是我应该把这段代码放在我的父组件或子组件中吗?这是父组件可以调用子组件上存在的函数的唯一方法,因此它可以在子组件上运行。如果你想让子组件调用父函数,那么你需要在父组件上添加一个require,并立即获得访问权限。你不需要require如果有任何问题,可以使用方法将方法传递到子组件中binding@MichaelWestcott这只是另一个选项。另外,如果您需要访问多个父级成员/函数,“require”更方便。另一个需要考虑的问题是,在使用方法绑定调用带参数的方法时,语法稍微有些混乱不同。@AlekseyL.完全同意,我只是指所问的问题,因为在这种情况下,方法绑定可能更合适。这是如何回答这个问题的?视图中的用法:
当用户单击从组件呈现的按钮时,它将触发一个回调,该回调将在cli中调用函数来自父组件的ck。