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