Javascript 在“角度”中的“自定义指令链接”属性中将值设置为工厂
我的问题是,我想根据单击的指令元素显示一个div。但是指令和div不在同一个控制器中,因此我想在工厂中设置值并将其传递给另一个控制器,但是工厂属性在另一个控制器中未定义 代码段, 将值设置为属性的位置Javascript 在“角度”中的“自定义指令链接”属性中将值设置为工厂,javascript,angularjs,Javascript,Angularjs,我的问题是,我想根据单击的指令元素显示一个div。但是指令和div不在同一个控制器中,因此我想在工厂中设置值并将其传递给另一个控制器,但是工厂属性在另一个控制器中未定义 代码段, 将值设置为属性的位置 app.directive("sideNavDiv", ['$rootScope','$window',function(layerFactory,$location) { function linkFunction(scope,elem,attrs) { elem.b
app.directive("sideNavDiv", ['$rootScope','$window',function(layerFactory,$location) {
function linkFunction(scope,elem,attrs) {
elem.bind('click',function(){
if(scope.info.content == 'Heat Map') {
layerFactory.showLayer = "block";
}else {
layerFactory.showLayer = "none";
}
$location.path = scope.info.link;
console.log(layerFactory);
});
}
return {
restrict: 'E',
scope: {
info: '=item'
},
templateUrl: '../directive-templates/side-nav-div.html',
link:linkFunction
};
}]);
接收控制器
app.controller('mapController', ['$scope','$rootScope', function($scope,layerFactory) {
$scope.layer1 = { classes: "danger-layer", top: "0", link: "/details", tooltip:"Need to automate", display:layerFactory.showLayer };
$scope.layer2 = { classes: "safe-layer", top: "33", link: "/details", tooltip:"In good condition", display:"none" };
$scope.layer3 = { classes: "over-water-layer", top: "66", link: "/details", tooltip:"To much water", display:"none" };
$scope.loadMap = function(latlng, zoom) {
console.log("Layer : " + layerFactory.showLayer);
var options = {
draggable: false,
scrollwheel: false,
panControl: false,
zoom: zoom,
center: latlng,
keyboardShortcuts: false
};
var map = new google.maps.Map(document.getElementById('map'), options);
var marker = new google.maps.Marker({
position: latlng,
map: map
});
//renderLayers();
};
$scope.loadOverallProgress = function() {
color_scheme = { less: "red", ok: "yellow", good: "green", tomuch: "blue", otherwise:"purple" };
$("#overall-status-meter").circularProgress({
line_width: 20,
color: color_scheme.otherwise,
starting_position: 0,
percent: 0, // start from
percentage: true,
height : "250px",
width: "250px"
}).circularProgress('animate', 67, 2000);
}
}]);
不要将$rootscope用作工厂,这是一种糟糕的做法。 我建议您使用geter和seter创建一个新工厂,如下所示:
app.factory('dataRetrievalFactory',function(){
返回{
数据:{},
get:函数(名称){
返回此.data[名称];
},
集合:函数(名称、值){
此.data[名称]=值;
}
}
})
不要将$rootscope用作工厂,这是一种糟糕的做法。
我建议您使用geter和seter创建一个新工厂,如下所示:
app.factory('dataRetrievalFactory',function(){
返回{
数据:{},
get:函数(名称){
返回此.data[名称];
},
集合:函数(名称、值){
此.data[名称]=值;
}
}
})