Javascript 角度1.5.|单击子组件从父组件调用函数?
在我的angular 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.
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。