这是问题:我在应用程序配置中指定了路径,如:
when('/url', {
controller: 'Controller',
templateUrl: 'url'
});
在视图中我只有:
<div ng-view my-directive="fire()"></div>
重要的是没有'ng-controller =“MyController”属性。 当用户加载url时,控制器触发,模板填充模型数据并很好地渲染。
然后我有一个指令必须在同一页面上执行以下操作:当我点击时,'Controller'必须执行该功能,获取数据并添加渲染模板/添加数据到现有。
指令是:
myAppModule.directive('myDirective', function() {
return {
restrict: 'A',
templateUrl: 'url',
replace: false,
link: function(scope, element, attrs) {
var raw = element[0];
element.bind('click', function() {
console.log('loaddata');
scope.$apply(attrs.fire);
});
}
};
});
console.log正在触发,但scope.$apply(attrs.fire)
- “Controller”中的fire()函数没有触发。主要提示是:
如果我在html中添加ng-controller =“Controller”它将起作用,但是当页面加载时将触发两次。
那么如何告诉指令在不使用ng-controller =“Controller”的情况下执行“Controller”火灾方法?
答案 0 :(得分:0)
您可以使用scope.$eval()
来调用该方法。
link: function(scope, element, attrs) {
var raw = element[0];
var func = attrs.myDirective; // gets the value fire()
element.bind('click', function() {
console.log('loaddata');
scope.$eval(func);
// you shouldn't need to call $apply here
// since func will be executed within the
// controller
});
}