1

他の kendo-ui コントロールでこの問題に気付きましたが、kendo-notification について具体的に質問します。私のhtmlには次のものがあります:

<span kendo-notification="vm.notifier"></span>
<button ng-click="vm.push()">Push it</button>

私のコントローラーには次のものがあります:

(function () {
'use strict';

angular
    .module('app.layout')
    .controller('Shell', Shell);

function Shell() {
    /*jshint validthis: true */
    var vm = this;

    vm.push = push;

    activate();

    function activate() {
        vm.notifier.show('Loaded', 'info');
    }

    function push() {
        vm.notifier.show('Pushed', 'info');
    }

}
})();

私の問題: ボタンをクリックすると、通知機能が表示されます。しかし、読み込み時に次のようになります: TypeError: Cannot read property 'show' of undefined at activate ( http://localhost:57624/app/layout/shell.controller.js:41:24 ) at new Shell ( http:/ /localhost:57624/app/layout/shell.controller.js:32:9 )

Angular のオブジェクトの状態について何かが欠けていると確信していますが、コントローラーのロード フェーズ中にこの通知を表示できないということは、何が欠けているのでしょうか?

4

1 に答える 1

1

コントローラー関数で activate を呼び出すとき、Kendo UI ウィジェットはまだ作成されていません。これに対する 1 つの解決策は、Kendo UI がこのシナリオ用に持つグローバル イベントの 1 つを使用することです ( kendoRendered)。

angular.module('app.layout', [ "kendo.directives" ])
    .controller('Shell', function ($scope) {       
        $scope.activate = function () {
            $scope.notifier.show('Loaded', 'info');
        };

        $scope.push = function () {
            $scope.notifier.show('Pushed', 'info');
        };

        $scope.$on("kendoRendered", function(event){
            $scope.activate();
        });
    }
);   

(デモ)

于 2015-02-08T03:55:50.110 に答える