我在理解范围以及控制器中指令和范围之间的关系时遇到了一些麻烦。
我有一个显示这样的导航栏的指令,在导航栏中我想显示一个名称,我使用localStorage存储
(function (module) {
var navbar = function () {
return {
restrict: "AE",
controller: function ($scope, localStorage) {
$scope.name = localStorage.get("name");
},
templateUrl: "/app/NSviewer/templates/nav.html"
};
};
module.directive("navbar", navbar);
}(angular.module("anbud")));
现在,当第一次加载此页面时,localStorage尚未设置名称值。因此导航栏获取name = null。然后控制器执行:
localStorage.add("name", name);
并设置名称,如果我刷新页面再次加载导航栏,这次名称存储在localstorage中并正确显示。
所以我想在控制器中执行类似$scope.name = 'John Smith'
的操作,然后让我的指令/导航栏更新。
答案 0 :(得分:2)
存储控制器和本地存储中的指令之间共享的值是过度的。通常,您执行以下操作:
(function() {
'use strict';
angular
.module('app')
.directive('dashboard', dashboard);
function dashboard() {
var directive = {
restrict: 'E',
controller: 'DashboardController',
controllerAs: 'vm',
bindToController: {
msg: '@'
},
scope: {},
templateUrl: '/templates/dashboard/dashboard.html'
};
return directive;
}
angular
.module('app')
.controller('DashboardController', DashboardController);
DashboardController.$inject = [];
function DashboardController(){
var vm = this;
vm.msg = 'Hello World'
}
})();
有些注意事项:
scope
属性一样运行,并附加控制器用来传递数据的东西。 var vm = this
而不是注入$scope
这是现在非常流行的方法,意味着你不要充满了范围汤。但你可以把它看作是一种基本上做同样事情的方法(那是绑定的东西,但它不能听事件,所以请记住)