Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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,我在AngularJS中创建了一个服务和视图,它提供了基于控件的动态按钮。我无法通过控制器中的变量实现隐藏/显示按钮 HeaderRemote.js app.factory('HeaderRemote',['$rootScope', function($rootScope) { var factory = { toolbar: [] }; // on history changes, remove toolbar $ro

我在AngularJS中创建了一个服务和视图,它提供了基于控件的动态按钮。我无法通过控制器中的变量实现隐藏/显示按钮

HeaderRemote.js

app.factory('HeaderRemote',['$rootScope', function($rootScope) {

    var factory = {            
        toolbar: []
    };

    // on history changes, remove toolbar
    $rootScope.$on("$routeChangeStart", function (event, next, current) {
        factory.toolbar.splice(0,factory.toolbar.length);
    });

    return factory;
}]);
HeaderController.js

return app.controller('HeaderCtrl',
    ['$rootScope', '$scope', 'HeaderRemote', function ($rootScope, $scope, HeaderRemote{

        $scope.toolbar = HeaderRemote.toolbar;
}]);
HeaderView.html

<ul class="nav navbar-nav">
    <li ng-repeat="tool in toolbar">
        <button type="button" 
                class="btn btn-link" 
                ng-click="tool.fn()" 
                ng-show="tool.show === undefined || tool.show">
                    <span ng-show="tool.icon" class="{{tool.icon}}"></span>
                    <span>{{tool.name}}</span>
        </button>
    </li>
</ul>

$scope.showSave
最初设置为
false
,但后来我将其设置为
true
,并且它在标题中从未更改。

当您最初将新项目推入HeaderRemote.toolbar时:

HeaderRemote.toolbar.push({
   name: "Save",
   fn: $scope.save,
   icon: "icon-check-alt",
   show: $scope.showSave
});
您正在分配$scope.showSave的当前值。但是,您没有将该新数组元素绑定到$scope,因此如果$scope发生更改,则不会更改HeaderRemote中的数组。如果需要,可以在控制器内设置一个监视程序,调用HeaderRemote.toolbar.push(),如下所示:

$scope.$watch("showSave", function (newValue, oldValue) {
    if (newValue !== oldValue) {
        /** Note that you'll need some way of retaining the index of the Header item you want to change. **/
        HeaderRemote.toolbar[0].show = newValue;
    }
})

将其设置为false的代码在哪里?加载时将其设置为false,然后当表单“脏”时,将其标记为true。老实说,您试图实现的目标看起来有点奇怪,但您是否尝试过:$scope.$apply(function(){/*something*/})@Dalorzo你有没有其他更好的反馈?我需要将标题与其他控件解耦。如果我是你,你会为工具栏生成一个指令
$scope.$watch("showSave", function (newValue, oldValue) {
    if (newValue !== oldValue) {
        /** Note that you'll need some way of retaining the index of the Header item you want to change. **/
        HeaderRemote.toolbar[0].show = newValue;
    }
})