javascript - AngularJS 自定义指令 $watch 不起作用

标签 javascript angularjs

html:

<mtx-matrice-form mtxMatrice="calendar"></mtx-matrice-form>

js:

'use strict';

angular.module('matrixarMatrice', []).directive('mtxMatriceForm', function () {
    return {
        restrict: 'E',
        templateUrl: 'views/matrice/matrice.html',
        scope: {
            mtxMatrice: '='
        },
        link: function (scope, element, attrs) {
            var updateDisplay = function () {
                //TODO
                for (var goDate in scope.outwardDates) {
                    console.log(goDate);
                }
            };
            scope.$watch(scope.mtxMatrice, updateDisplay, true);
        }
    };
});

js:

'use strict';

angular.module('matrixarSearch', [
    'mm.foundation',
    'matrixarConfig',
    'matrixarAutocomplete',
    'matrixarCalendar',
    'matrixarMatrice'
]).controller('MainController', function ($scope, $translate, CitiesService, SearchService, mtxConstants) {
...
        search.calendar = function (id) {
            if (search.origin && search.destination && search.goDate && search.returnDate) {

                if (search.goDate) {
                    var tmpGoDate = search.goDate; // needs 2014-12-23
                    goDate = tmpGoDate.split('/').reverse().join('-');
                }
                if (search.returnDate) {
                    var tmpReturnDate = search.returnDate; // needs 2014-12-23
                    returnDate = tmpReturnDate.split('/').reverse().join('-');
                }

                SearchService.search(search.origin.rrCode, search.destination.rrCode, goDate, returnDate, search.paxes.value, search.typo.value, search.card.value).then(function (data) {
                    $scope.calendar = data;
                }).catch(function (rejection) {
                    //TODO gérer les erreurs
                });
            }
        };
...

当我点击我的按钮时,我调用 search.calendar 来初始化我的 $scope.calendar 但我的指令中的 watch 不会被调用。

如何观察 mtxMatrice="calendar" 的值是否更新?

最佳答案

您正在编写错误的语法来监视范围属性。更改您的代码

scope.$watch(scope.mtxMatrice, updateDisplay, true);

scope.$watch('mtxMatrice', updateDisplay, true);

关于javascript - AngularJS 自定义指令 $watch 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27685704/

相关文章:

javascript - 在我的情况下如何返回对象?

javascript - 编码 hell ! JSON ajax 请求 (utf-8) 到 Latin1 大写字符

javascript - "iframe.contentDocument"在 IE8 和 FF(3.5 及以下版本)中不工作还有其他步骤可以解决这个问题吗?

javascript - 如果使用 javascript 几秒钟没有用户事件,如何刷新页面

javascript - 异步客户端 javascript 进程与服务器对话

javascript - 如何获得 ng-list 行为,但模型略有不同?

angularjs - Node-webkit + Angular.js 未捕获错误 : [$injector:modulerr]

javascript - HTMl5 tel 和 sms 是否返回任何值?

angularjs - 使用 Node 在 Angularjs 中保存复选框列表

javascript - 捕获 ng-show 事件并聚焦输入字段