Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在“角度”中的“自定义指令链接”属性中将值设置为工厂_Javascript_Angularjs - Fatal编程技术网

Javascript 在“角度”中的“自定义指令链接”属性中将值设置为工厂

Javascript 在“角度”中的“自定义指令链接”属性中将值设置为工厂,javascript,angularjs,Javascript,Angularjs,我的问题是,我想根据单击的指令元素显示一个div。但是指令和div不在同一个控制器中,因此我想在工厂中设置值并将其传递给另一个控制器,但是工厂属性在另一个控制器中未定义 代码段, 将值设置为属性的位置 app.directive("sideNavDiv", ['$rootScope','$window',function(layerFactory,$location) { function linkFunction(scope,elem,attrs) { elem.b

我的问题是,我想根据单击的指令元素显示一个div。但是指令和div不在同一个控制器中,因此我想在工厂中设置值并将其传递给另一个控制器,但是工厂属性在另一个控制器中未定义

代码段, 将值设置为属性的位置

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[名称]=值;
}
}
})