这个工厂和指令有什么问题?
app.factory('myTools', function() {
return {
days: function() { return 31; }
};
}) ;
app.directive('listDays', ['myTools',function(myTools){
return {
restrict: 'E',
template: '<div>days = {{myTools.days()}}</div>'
}
}]);
以下html不起作用
<list-days></list-days>
仅显示
days =
答案 0 :(得分:1)
如果您愿意,也可以将其全部保留在指令中。这只是因为工厂方法不是范围变量。只需要以某种方式使$ scope访问视图。
var app = angular.module('plunker', []);
app.factory('myTools', function() {
return {
days: function() {
return 31;
}
};
});
function ListDays(myTools) {
return {
restrict: 'E',
template: '<div>days = {{days}}</div>',
link: function($scope) {
$scope.days = myTools.days();
}
};
}
app.directive('listDays', ListDays);
app.controller('MainCtrl', function($scope) {});
修改强>
var app = angular.module('plunker', []);
app.factory('myTools', function() {
return {
days: function() {
return 31;
}
};
});
function ListDays(myTools) {
return {
restrict: 'E',
template: '<div>days = {{myTools.days()}}</div>',
link: function($scope) {
$scope.myTools = myTools;
}
};
}
app.directive('listDays', ListDays);
app.controller('MainCtrl', function($scope) {});
答案 1 :(得分:0)
要达到预期效果,请使用以下选项
1.将工厂注入Ctrl-MainCtrl
2.创建范围变量 - 天并在指令中使用它
3.代码中的指令使用父作用域(控制器/指令所在的位置)
var app = angular.module('plunker', []);
app.factory('myTools', function() {
return {
days: function() { return 31; }
};
}) ;
app.directive('listDays', function(){
return {
restrict: 'E',
template: '<div>days = {{days}}</div>'
}
});
app.controller('MainCtrl', function($scope,myTools) {
$scope.days = myTools.days();
});
Plunker- http://plnkr.co/edit/Kny9SSp7c0yyc3ItVXvy?p=preview
更新:通过将工厂注入指令链接范围
的独立指令var app = angular.module('plunker', []);
app.factory('myTools', function() {
return {
days: function() { return 31; }
};
}) ;
app.directive('listDays', ['myTools',function(myTools){
return {
restrict: 'E',
template: '<div>days = {{days}}</div>',
link: function (scope, element, attrs) {
scope.days = myTools.days();
}
}
}]);
app.controller('MainCtrl', function($scope) {
});
Plunker- http://plnkr.co/edit/Fh9i2FqbglPHWIBYRsVm?p=preview