加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Angular指令没有获取服务数据

发布时间:2020-12-17 17:19:42 所属栏目:安全 来源:网络整理
导读:我的服务NavData angular.module('navData',[]). factory('NavData',function() { var navData = {}; navData.depth = 0; navData.category_id = ""; navData.category_name = ""; navData.subcategory_id = ""; navData.subcategory_name = ""; return navD
我的服务NavData

angular.module('navData',[]).
    factory('NavData',function() {
        var navData = {};
        navData.depth = 0;
        navData.category_id = "";
        navData.category_name = "";
        navData.subcategory_id = "";
        navData.subcategory_name = "";
        return navData;
    });

在某些页面上从ui-router接收值:

var category = { 
    name: 'category',parent: site,url: '/categories/:category_id',onEnter: function(NavData,$stateParams){
      NavData.depth = 1;
      NavData.category_id = $stateParams.category_id;
      console.log(NavData);         
    },views: {
      'navigation': {
      templateUrl: 'partials/category-menu.html'
      },'content': {
      templateUrl: 'partials/category-images.html'
      }
    }
  };

出现在所有页面上的指令应该注意服务中的更改并将其反映在自定义的痕迹导航功能中:

.directive('breadcrumb',['NavData',function(NavData){
    return {
      templateUrl: 'partials/breadcrumb.html',link: function(scope,elm,attrs,ctrl){
        scope.depth            = NavData.depth;
        scope.category_id      = NavData.category_id;
        scope.category_name    = NavData.category_name;
        scope.subcategory_name = NavData.subcategory_name;

        var doStuff = function(navdata){
          console.log("watching depth: " + navdata.depth);
          console.log("watching cat_id: "+ navdata.category_id);
        };
        scope.$watch(NavData.depth,doStuff(NavData),true);
        scope.$watch(NavData.category_id,true);
      }

    };
  }])

但是,范围.$watch似乎不起作用.这是我的日志:

watching depth: 0 directives.js:28
watching cat_id:  directives.js:29
watching depth: 0 directives.js:28
watching cat_id:  directives.js:29
Object {depth: 1,category_id: "1",category_name: "",subcategory_id: "",subcategory_name: ""} app.js:25

我究竟做错了什么?

解决方法

你的第一个错误在范围内.$watch()第一个参数:它是在给定范围内计算的表达式(字符串),或者是返回值的函数;存储该值,并在每个摘要周期运行该函数;如果新值不同,则触发侦听器(第二个参数).

所以第一次修正是:

scope.$watch(function() {
    return NavData.depth,},.../*other arguments,see below*/);

现在第二个论点也是错的!它应该是一个函数,你提供函数的返回值(顺便说一下,doStuff是未定义的).第二个参数函数接收新值(由上面第一个参数返回),旧值和范围.在您的情况下,您不关心新/旧值.所以完整的解决方案应该是:

scope.$watch(function() { // decide the watched value
    return NavData.depth,function() { // what to do when the value changes
    // do stuff and reference NavData normally
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读